我可以从.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