2009-07-02 6 views
2

J'ai un service qui crée un certain nombre de processus enfants. En utilisant C# j'ai besoin de déterminer le nombre de ces processus enfants qui sont en cours d'exécution.Comment puis-je obtenir une liste de processus enfants pour un service donné en C#?

Par exemple, j'ai un service en cours d'exécution appelé "TheService". Cela engendre 5 processus enfants, tous appelés "process.exe". Est-il possible de déterminer le nombre de processus enfants qui s'exécutent sous le service? Essentiellement, j'ai besoin de connaître le nombre d'instances de "process.exe" donné seulement le nom du nom du processus de service/service.

Répondre

4

Vous devez utiliser WMI, la classe Win32_Process inclut l'ID de processus parent. Ainsi, une requête WQL (voir l'espace de noms System.Management pour WMI sous .NET) comme:

 
SELECT * FROM Win32_Process Where ParentProcessId = n 

remplaçant n avec le numéro de processus du service.

EDIT Exemple de code (basé sur le code par 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

cette liste ne fait-elle figurer que les processus 32 bits ?? –

+1

@ It'satrap: non (juste vérifié où le parent est 32bit et l'enfant est 64). – Richard

+0

Merci beaucoup. J'ai moi aussi vérifié. –

0

Je ne sais pas exactement ce que vous entendez par "le nom du service" - serait-ce processus.exe?

Si oui, la méthode statique Process.GetProcessesByName() devrait faire l'affaire:

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

Permettez-moi de savoir si je mal compris votre question.

+0

Désolé je n'étais pas très claire. Après y avoir réfléchi un peu plus, je réalise que j'ai juste besoin d'obtenir le nombre de processus enfants pour un nom de processus donné. Merci pour votre réponse. – Bardsley

+0

Ok. Les réponses de Richard devraient alors le résoudre. Je retire ma réponse, mais à moins que quelqu'un ne s'y oppose, je vais le laisser ici, car il pourrait aider les autres à l'avenir ... :) –

Questions connexes