Как я могу получить список дочерних процессов для данной службы в C #?

2

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

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

Теги:
process
service

2 ответа

4
Лучший ответ

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

SELECT * FROM Win32_Process Where ParentProcessId = n

заменяя 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
    @ Itatrap: нет (только что проверил, где родитель 32-битный, а ребенок 64).
Показать ещё 2 комментария
0

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

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

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

Сообщите мне, если я неправильно понял ваш вопрос.

  • 0
    Извините, я не очень ясно Подумав об этом немного больше, я понимаю, что мне просто нужно получить количество дочерних процессов для данного имени процесса. Спасибо за Ваш ответ.
  • 0
    Хорошо. Ответы Ричарда должны решить это тогда. Я забираю свой ответ, но если кто-то не возражает, я оставлю его здесь, так как это может просто помочь другим в будущем ... :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню