如何读取C#中另一个进程的命令行参数?

我如何获得另一个进程的命令行参数?

使用System.Diagnostics.Process类的静态函数,我可以获得正在运行的进程的列表,例如按名称:

 Process[] processList = Process.GetProcessesByName(processName); 

但是,无法访问用于启动此过程的命令行。 怎么会这样呢?

如果您没有使用Start方法来启动进程,则StartInfo属性不会反映用于启动该进程的参数。 例如,如果使用GetProcesses获取在计算机上运行的进程数组,则每个进程的StartInfo属性不包含用于启动该进程的原始文件名或参数。 (来源: MSDN )

斯图亚特的WMIbuild议是一个很好的build议:

 string wmiQuery = string.Format("select CommandLine from Win32_Process where Name='{0}'", processName); ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery); ManagementObjectCollection retObjectCollection = searcher.Get(); foreach (ManagementObject retObject in retObjectCollection) Console.WriteLine("[{0}]", retObject["CommandLine"]); 

如果您的目标是Windows XP或更高版本,并且您可以承担WMI的开销,则可能会使用具有CommandLine属性的WMI的WIN32_Process类查找目标进程。

Process.StartInfo返回一个ProcessStartInfo对象,据称但不一定在Arguments属性中有参数。

这两个项目都是你的吗? 你可以修改你想要检查的进程的源代码,让它给你命令行参数,而不是试图从那个进程之外的地方读取它们?