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