2009-07-02 1 views
2

У меня есть служба, которая создает несколько дочерних процессов. Использование C# Мне нужно определить количество этих дочерних процессов, которые в настоящее время запущены.Как я могу получить список дочерних процессов для данной службы на C#?

Например, у меня есть служба под названием «TheService». Это порождает 5 дочерних процессов, все называемые «process.exe». Можно ли определить количество дочерних процессов, работающих под этой службой? По сути, мне нужно знать количество экземпляров «process.exe», учитывая только имя имени службы/службы.

ответ

4

Необходимо использовать WMI, класс Win32_Process включает в себя родительский идентификатор процесса. Таким образом, WQL запросов (см System.Management пространство имен WMI в .NET), как:

 
SELECT * FROM Win32_Process Where ParentProcessId = n 

замена п с идентификатором процесса службы.

EDIT Пример кода (основанный на коде 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

ли это список только 32-битных процессов? –

+1

@ It'satrap: no (только что проверили, где родительский 32-битный, а для ребенка - 64). – Richard

+0

Большое спасибо. Я сам тоже проверял. –

0

Я не совсем уверен, что вы подразумеваете под «именем службы» - это будет process.exe?

Если да, то статический метод Process.GetProcessesByName() должен сделать трюк:

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

Позвольте мне знать, если я неправильно понял ваш вопрос.

+0

К сожалению, я не очень ясно. Подумав об этом немного больше, я понимаю, что мне просто нужно получить количество дочерних процессов для данного имени процесса. Спасибо за Ваш ответ. – Bardsley

+0

Хорошо. Тогда ответы Ричарда должны решить. Я снимаю свой ответ, но если кто-то не возражает, я оставлю его здесь, поскольку он может просто помочь другим в будущем ... :) –