我有一個服務可以創建一些子進程。使用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