Запускаю из своего приложения процесс A, который в свою очередь запускает другой процесс B. Сразу после запуска процесса B процесс A завершает работу. Как, зная id процесса A, узнать id процесса B?
Здравствуйте, Flammable, Вы писали:
F>Запускаю из своего приложения процесс A, который в свою очередь запускает другой процесс B. Сразу после запуска процесса B процесс A завершает работу. Как, зная id процесса A, узнать id процесса B?
До окончания A или после ?
Если после — задача некорректно поставлена. id после окончания не валиден
Если до окончания —
В Win32 есть Process32First/Process32Next. Они заполняют структуру PROCESSENTRY32, в которой есть
DWORD th32ParentProcessID;
The identifier of the process that created this process (its parent process).
Перебирая эти процессы, можно найти тот, у которого th32ParentProcessID == id A.
Почему-то это поле не присутствует в классе .NET Process.
With best regards
Pavel Dvorkin
Re[2]: Получение id дочернего процесса, зная id родительског
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, Flammable, Вы писали:
F>>Запускаю из своего приложения процесс A, который в свою очередь запускает другой процесс B. Сразу после запуска процесса B процесс A завершает работу. Как, зная id процесса A, узнать id процесса B?
PD>До окончания A или после ?
PD>Если после — задача некорректно поставлена. id после окончания не валиден
PD>Если до окончания —
PD>В Win32 есть Process32First/Process32Next. Они заполняют структуру PROCESSENTRY32, в которой есть
PD>DWORD th32ParentProcessID; PD>The identifier of the process that created this process (its parent process).
PD>Перебирая эти процессы, можно найти тот, у которого th32ParentProcessID == id A.
PD>Почему-то это поле не присутствует в классе .NET Process.
Естественно, до окончания А.
Я пробовал способ с WinAPI, описанный здесь: http://blogs.msdn.com/b/toffer/archive/2005/07/21/441540.aspx , но функции CreateToolHelp32Snapshot в kernel32.dll у меня нет. Операционная система — Windows 7 x64.
Или можно обойтись без этой функции?
Re[3]: Получение id дочернего процесса, зная id родительског
Здравствуйте, Flammable, Вы писали:
F>Я пробовал способ с WinAPI, описанный здесь: http://blogs.msdn.com/b/toffer/archive/2005/07/21/441540.aspx , но функции CreateToolHelp32Snapshot в kernel32.dll у меня нет. Операционная система — Windows 7 x64.
Не может быть! Сейчас проверил — есть. У меня тоже W7-64
dumpbin.exe kernel32.dll /exports >log
190 BD 00001FD0 CreateToolhelp32Snapshot
Только будь внимателен — kernel32.dll надо взять из истинного system32, а не из того, что FAR показывает, потому что он показывает в действительности из SYSWOW64, т.е 32-битную. Впрочем, там она тоже есть.
With best regards
Pavel Dvorkin
Re[2]: Получение id дочернего процесса, зная id родительског
Здравствуйте, Flammable, Вы писали:
F>Запускаю из своего приложения процесс A, который в свою очередь запускает другой процесс B. Сразу после запуска процесса B процесс A завершает работу. Как, зная id процесса A, узнать id процесса B?
Можно через WMI с таким запросом:
SELECT * FROM Win32_Process WHERE ParentProcessId = <A PID>
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, Flammable, Вы писали:
F>>Запускаю из своего приложения процесс A, который в свою очередь запускает другой процесс B. Сразу после запуска процесса B процесс A завершает работу. Как, зная id процесса A, узнать id процесса B?
__>Можно через WMI с таким запросом: __>
__>SELECT * FROM Win32_Process WHERE ParentProcessId = <A PID>
__>
Если не трудно, напишите пожалуйста, как делается такой запрос. С WMI вообще не знаком.
Re: Получение id дочернего процесса, зная id родительского
Здравствуйте, Flammable, Вы писали:
F>Запускаю из своего приложения процесс A, который в свою очередь запускает другой процесс B. Сразу после запуска процесса B процесс A завершает работу. Как, зная id процесса A, узнать id процесса B?
Проще всего наверное так:
using System.Diagnostics;
using System.Management;
...
public static int GetParentProcessID(int processPID)
{
var mo = new ManagementObject(string.Format("Win32_Process.Handle='{0}'", processPID));
return Convert.ToInt32(mo["ParentProcessID"]);
}
...
int parentProcessID = GetParentProcessID(Process.GetCurrentProcess().Id);
Здравствуйте, Jolly Roger, Вы писали:
MC>> var mo = new ManagementObject(string.Format("Win32_Process.Handle='{0}'", processPID)); JR>Видимо, всё-таки "Win32_Process.ProcessId ='{0}'" ?
Нет.
Re[3]: Получение id дочернего процесса, зная id родительског