我可以从.NET / C#获取其他进程的命令行参数吗?

我有一个项目,其中有一个正在运行的应用程序的多个实例,每个实例都使用不同的命令行参数启动。我希望有一种方法可以从这些实例之一中单击一个按钮,然后关闭所有实例,然后使用相同的命令行参数再次启动它们。

我可以通过轻松地获取流程本身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();

}

}

以上是 我可以从.NET / C#获取其他进程的命令行参数吗? 的全部内容, 来源链接: utcz.com/qa/406028.html

回到顶部