我有一个项目,其中有一个正在运行的应用程序的多个实例,每个实例都使用不同的命令行参数启动。我希望有一种方法可以从这些实例之一中单击一个按钮,然后关闭所有实例,然后使用相同的命令行参数再次启动它们。
我可以通过轻松地获取流程本身Process.GetProcessesByName(),但是无论何时,该StartInfo.Arguments属性始终是一个空字符串。似乎该属性仅在启动进程之前才有效。
Process.GetProcessesByName()
StartInfo.Arguments
这个问题有一些建议,但是它们全都在本机代码中,我想直接从.NET中做到这一点。有什么建议么?
这正在使用所有托管对象,但确实涉及到WMI领域:
private static void Main() { foreach (var process in Process.GetProcesses()) { try { Console.WriteLine(process.GetCommandLine()); } catch (Win32Exception ex) when ((uint)ex.ErrorCode == 0x80004005) { // Intentionally empty - no security access to the process. } catch (InvalidOperationException) { // Intentionally empty - the process exited before getting details. } } } private static string GetCommandLine(this Process process) { using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id)) using (ManagementObjectCollection objects = searcher.Get()) { return objects.Cast<ManagementBaseObject>().SingleOrDefault()?["CommandLine"]?.ToString(); } }