У меня есть служба, которая создает несколько дочерних процессов. Использование С# Мне нужно определить количество этих дочерних процессов, которые в настоящее время выполняются.
Например, у меня есть служба под названием "TheService". Это порождает 5 дочерних процессов, все называемые "process.exe". Можно ли определить количество дочерних процессов, работающих под этой службой? По существу мне нужно знать количество экземпляров "process.exe", учитывая только имя имени службы/службы.
Вам необходимо использовать 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;
}
Я не уверен, что вы подразумеваете под "именем службы" - это будет process.exe?
Если это так, статический метод Process.GetProcessesByName() должен сделать трюк:
Process[] procs = Process.GetProcessesByName("process");
Console.WriteLine(procs.Length);
Сообщите мне, если я неправильно понял ваш вопрос.