C#WMI流程差异化? 脚本

C#WMI流程差异化? 脚本,c#,wmi,C#,Wmi,我有一个方法可以返回使用WMI的进程列表。 如果我有3个正在运行的进程(都是C#应用程序),它们都有相同的进程名,但命令行参数不同,那么如果我想启动或终止它们,我如何区分它们呢 思想 就我所见,我在身体上无法区分它们,至少在不使用手柄的情况下无法区分,但这并不能告诉我其中哪一个被终止,因为其他人仍将以相同的名字坐在那里 ……真是难倒了,非常感谢您的帮助 WMI有一个命令行属性,如果您知道这是区分实例的方法,则可以使用该属性 string query = “Select * From Win32_

我有一个方法可以返回使用WMI的进程列表。 如果我有3个正在运行的进程(都是C#应用程序),它们都有相同的进程名,但命令行参数不同,那么如果我想启动或终止它们,我如何区分它们呢

思想 就我所见,我在身体上无法区分它们,至少在不使用手柄的情况下无法区分,但这并不能告诉我其中哪一个被终止,因为其他人仍将以相同的名字坐在那里

……真是难倒了,非常感谢您的帮助

WMI有一个命令行属性,如果您知道这是区分实例的方法,则可以使用该属性

string query = “Select * From Win32_Process Where Name = “ + processName;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processList = searcher.Get();

foreach (ManagementObject obj in processList)
{
     string cmdLine = obj.GetPropertyValue("CommandLine").ToString();

     if (cmdLine == "target command line options")
     {
          // do work
     }
}

使用将进程ID作为输出参数的技术创建进程。例如

  • WMI:方法返回
    [out]uint32 ProcessId
  • .NET:方法返回具有属性的进程对象
然后,您可以使用该值来真正了解以后要终止哪个版本的进程。例如

  • WMI:获取与ProcessId匹配的Win32_进程实例,调用
  • .NET:使用GetProcessById获取流程实例,然后调用

(请注意,如果进程在您终止之前停止,操作系统可以将相同的进程ID分配给新进程,因此您当然需要再次检查是否正在终止正确的进程,例如,也检查进程名称)

当您第一次启动这些进程时,是否有任何方法可以获取进程ID?为什么不使用
Handle
?不管怎么说,这是关键属性。将这两个注释结合起来:
Handle
属性就是过程ID。您能详细说明“如果我想启动它们”的含义吗?您的意思是“我想用相同的名称启动第四个进程,以后如何识别该特定实例以终止它?”?请注意,您需要
SeDebugPrivilege
来读取
Win32\u process.CommandLine
,因此通常无法远程读取此属性。