2009-07-02 84 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

相關問題