代码之家  ›  专栏  ›  技术社区  ›  Dirk Vollmar

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

  •  29
  • Dirk Vollmar  · 技术社区  · 17 年前

    使用 System.Diagnostics.Process class I可以获得运行进程的列表,例如按名称:

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

    但是,无法访问用于启动此进程的命令行。你会怎么做?

    4 回复  |  直到 12 年前
        1
  •  56
  •   xcud    17 年前

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

    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"]);
    
        2
  •  5
  •   stuartd saeed    17 年前

    如果您的目标是Windows XP或更高版本,并且您可以负担WMI的开销,则可以使用WMI的 WIN32_Process class ,它具有命令行属性。

        3
  •  1
  •   Rui Jarimba    13 年前

    Process.StartInfo 返回一个 ProcessStartInfo

        4
  •  0
  •   JMD    17 年前

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