Как в C# получить ProcessID всех дочерних процессов, процесса который запущен с помощью System.Diagnostics.Process.Start()

Требуется запустить процесс(Это я сделал) и узнать все дочерние процессы этого запущенного процесса

Process operaprocess = Process.Start(filename, arguments);

Ответы (2 шт):

Автор решения: WinnerIT

Код взят из MSDN

try
{                            
   var childrenProcesses = GetСhildProcesses(operaprocess.Id);      
}
catch (Exception ex)
{
    try
    {
        Logger log = new Logger();
        log.Write("Exception caught ", ex.Message, System.Diagnostics.EventLogEntryType.Warning, false);
    }
    catch { }
}

/*
 * get children process for a given PID
 */
private List<Process> GetСhildProcesses(int pid)
{
    var children = new List<Process>();
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid);
    ManagementObjectCollection moc = searcher.Get();
    foreach (ManagementObject mo in moc)
    {
        children.Add(mo);
    }
    return children;
}
→ Ссылка
Автор решения: KuzCode
using System.Management;

public static class ProcessExtensions
{
    public static IEnumerable<Process> GetChildProcesses(this Process process)
    {
        var children = new List<Process>();
        var mos = new ManagementObjectSearcher(String.Format("Select * From Win32_Process Where ParentProcessID={0}", process.Id));

        foreach (ManagementObject mo in mos.Get())
            children.Add(Process.GetProcessById(Convert.ToInt32(mo["ProcessID"])));

        return children;
    }
}

Оригинал ответа: https://stackoverflow.com/questions/17922725/monitor-child-processes-of-a-process/38614443

→ Ссылка