Comment obtenir une liste de processus enfants pour un service donné en C #?

J’ai un service qui crée un certain nombre de processus enfants. Utilisation de c # Je dois déterminer le nombre de ces processus enfants en cours d’exécution.

Par exemple, j’ai un service en cours d’exécution appelé “TheService”. Cela génère 5 processus enfants, tous appelés “process.exe”. Est-il possible de déterminer le nombre de processus enfants exécutés sous le service? J’ai essentiellement besoin de connaître le nombre d’instances de “process.exe”, à partir du nom du service / nom du processus.

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

 SELECT * FROM Win32_Process Où ParentProcessId = n

en remplaçant n par l’ID de processus du service.

EDIT Exemple de code (basé sur le code d’ Arsen Zahray ):

static List 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; } 

Je ne sais pas exactement ce que vous entendez par “le nom du service” – s’agirait-il de process.exe?

Si tel est le cas, la méthode statique Process.GetProcessesByName () devrait faire l’affaire:

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

Faites-moi savoir si j’ai mal compris votre question.