2009-07-02 4 views
2

Ich habe einen Dienst, der eine Reihe von untergeordneten Prozessen erzeugt. Mit C# muss ich die Anzahl dieser untergeordneten Prozesse bestimmen, die gerade ausgeführt werden.Wie kann ich eine Liste der untergeordneten Prozesse für einen bestimmten Dienst in C# zu bekommen?

Zum Beispiel habe ich einen Dienst ausgeführt namens „theservice“. Dies erzeugt 5 untergeordnete Prozesse, die alle als "process.exe" bezeichnet werden. Ist es möglich, die Anzahl der untergeordneten Prozesse zu bestimmen, die unter dem Dienst ausgeführt werden? Im Grunde muss ich die Anzahl der Instanzen von „process.exe“ nur der Name des Dienstes/Service-Prozess Namen gegeben kennen.

Antwort

4

Sie müssen WMI verwenden, die Win32_Process Klasse umfasst die übergeordnete Prozess-ID. So eine WQL-Abfrage (siehe System.Management Namespace für WMI unter .NET) wie:

 
SELECT * FROM Win32_Process Where ParentProcessId = n 

ersetzt n mit dem Prozess-ID des Dienstes.

EDIT Beispielcode (basierend auf Code von 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

führt dies nur die 32-Bit-Prozesse auf? –

+1

@ It'satrap: Nein (nur überprüft, wo der Eltern 32bit ist und das Kind 64 ist). – Richard

+0

Vielen Dank. Ich selbst habe es auch verifiziert. –

0

Ich bin nicht genau sicher, was Sie durch „den Namen des Dienstes“ bedeuten - dass process.exe würde?

Wenn ja, die statische Methode Process.GetProcessesByName() den Trick tun sollten:

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

Lassen Sie mich wissen, ob ich Ihre Frage falsch verstanden.

+0

Leider war ich nicht sehr klar. Nachdem ich darüber nachgedacht habe, merke ich, dass ich nur die Anzahl der untergeordneten Prozesse für einen bestimmten Prozessnamen abfragen muss. Danke für deine Antwort. – Bardsley

+0

Ok. Richards Antworten sollten es dann lösen. Ich ziehe meine Antwort zurück, aber wenn niemand widerspricht, werde ich es hier belassen, da es vielleicht anderen in der Zukunft helfen könnte ... :) –

Verwandte Themen