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.