我有创建许多子进程的服务。 使用C#我需要确定这是目前运行这些子进程的数量。
比如我有一个名为“TheService”服务运行。 这5个派生的子进程,全称为“process.exe”。 是否有可能确定服务下运行的子进程的数目? 基本上我需要知道给出的服务/服务流程的名称只有名称“process.exe”的实例的数量。
我有创建许多子进程的服务。 使用C#我需要确定这是目前运行这些子进程的数量。
比如我有一个名为“TheService”服务运行。 这5个派生的子进程,全称为“process.exe”。 是否有可能确定服务下运行的子进程的数目? 基本上我需要知道给出的服务/服务流程的名称只有名称“process.exe”的实例的数量。
您需要使用WMI的Win32_Process的类包括父进程ID。 因此,一个WQL查询(参见下.NET System.Management命名空间的WMI),如:
SELECT * FROM Win32_Process Where ParentProcessId = n
与服务的进程ID 值替换掉n。
编辑示例代码(基于代码阿尔森Zahray ):
static List<Process> GetChildPrecesses(int parentId) {
var query = "Select * From Win32_Process Where ParentProcessId = "
+ parentId;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processList = searcher.Get();
var result = processList.Select(p =>
Process.GetProcessById(Convert.ToInt32(p.GetPropertyValue("ProcessId")));
).ToList();
return result;
}
我不知道究竟你所说的“服务名称”的意思 - 那会是process.exe?
如果是这样,静态方法Process.GetProcessesByName()应该做的伎俩:
Process[] procs = Process.GetProcessesByName("process");
Console.WriteLine(procs.Length);
让我知道如果我误解你的问题。