Я пытаюсь перечислить все дочерние объекты данного процесса (учитывая его идентификатор процесса). После некоторых исследований я пришел к этому:Список всех дочерних процессов процесса
static void Main(string[] args)
{
listChildProcesses(0);
Console.ReadKey();
}
public static void listChildProcesses(int parentProcessId)
{
String myQuery = string.Format("select * from win32_process where ParentProcessId={0}", parentProcessId);
ObjectQuery objQuery = new ObjectQuery(myQuery);
ManagementObjectSearcher objSearcher = new ManagementObjectSearcher(objQuery);
ManagementObjectCollection processList = objSearcher.Get();
foreach (ManagementObject item in processList)
{
try
{
int processId = Convert.ToInt32(item["ProcessId"].ToString());
Console.WriteLine("processId:{0} name:{1} {2}",
item["ProcessId"],
item["Name"],
item["ParentProcessId"]
);
// recursive call
if (processId != parentProcessId)
listChildProcesses(processId);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e);
}
}
}
Я надеялся, что это позволило бы мне, чтобы отобразить все процессы (так как метод начинается с PID = 0, а затем рекурсивно называется на каждом PID нашли оттуда).
Но вот выход я получаю на моем Windows 8 (x86):
processId:0 name:System Idle Process 0
processId:4 name:System 0
processId:300 name:smss.exe 4
Он останавливается. Я ожидал, что он продолжит работу с каждым ребенком Системы, а затем с каждым ребенком этих детей.
Возможный дубликат [Как я могу получить список дочерних процессов для данного устройства в C#?] (Http://stackoverflow.com/questions/1073615/how-can-i-get-a-list-of -child-processes-for-a-given-sevice-in-c) – MethodMan
Спасибо, что указали это! Я действительно видел это раньше, пытаясь понять это. Но он не упоминает о проблеме, с которой я столкнулся, почему рекурсивный вызов не перечисляет их всех. – Juicy