2009-07-02 87 views
2

我有一个服务可以创建一些子进程。使用c#我需要确定当前正在运行的这些子进程的数量。如何获取C#中给定服务的子进程列表?

例如我有一个服务运行称为“TheService”。这产生了5个子进程,全部被称为“process.exe”。是否可以确定在服务下运行的子进程的数量?本质上我需要知道只给出服务/服务进程名称的名称的“process.exe”实例的数量。

回答

4

您需要使用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; 
} 
0

我不确定你的意思是“服务的名称” - 会不会是process.exe?

如果是这样,静态方法Process.GetProcessesByName()应该做的伎俩:

Process[] procs = Process.GetProcessesByName("process"); 
Console.WriteLine(procs.Length); 

让我知道如果我误解你的问题。

+0

对不起,我也不是很清楚。考虑了一点后,我意识到我只需要获取给定进程名称的子进程数量。感谢您的回答。 – Bardsley 2009-07-02 10:41:19

+0

好的。那么Richard的答案应该可以解决它。我撤回了我的答案,但除非有人反对,否则我将把它留在这里,因为它可能在未来帮助其他人...... :) – 2009-07-02 11:01:03

相关问题