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

时间:2009-02-02 18:10:50

标签: c# process diagnostics

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

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

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

但是,无法访问用于启动此过程的命令行。如何做到这一点?

4 个答案:

答案 0 :(得分:55)

  

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

斯图尔特的WMI建议很好:

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"]);

答案 1 :(得分:5)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这两个项目都是你的吗?您是否可以修改您尝试检查的进程的源代码,以使其为您提供命令行参数,而不是尝试从该进程之外的某个位置读取它们?