Как в 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