我有一个服务可以创建一些子进程。使用c#我需要确定当前正在运行的这些子进程的数量。如何获取C#中给定服务的子进程列表?
例如我有一个服务运行称为“TheService”。这产生了5个子进程,全部被称为“process.exe”。是否可以确定在服务下运行的子进程的数量?本质上我需要知道只给出服务/服务进程名称的名称的“process.exe”实例的数量。
我有一个服务可以创建一些子进程。使用c#我需要确定当前正在运行的这些子进程的数量。如何获取C#中给定服务的子进程列表?
例如我有一个服务运行称为“TheService”。这产生了5个子进程,全部被称为“process.exe”。是否可以确定在服务下运行的子进程的数量?本质上我需要知道只给出服务/服务进程名称的名称的“process.exe”实例的数量。
您需要使用WMI,Win32_Process类包含父进程ID。因此,一个WQL查询(参见下.NET System.Management命名空间的WMI),如:
SELECT * FROM Win32_Process Where ParentProcessId = n
与服务的进程ID替换ñ。
编辑示例代码(由Arsen 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);
让我知道如果我误解你的问题。
对不起,我也不是很清楚。考虑了一点后,我意识到我只需要获取给定进程名称的子进程数量。感谢您的回答。 – Bardsley 2009-07-02 10:41:19
好的。那么Richard的答案应该可以解决它。我撤回了我的答案,但除非有人反对,否则我将把它留在这里,因为它可能在未来帮助其他人...... :) – 2009-07-02 11:01:03