CreateProcess возвращает дескриптор, отличный от запущенного Chrome.exe - PullRequest
0 голосов
/ 12 февраля 2019

Я использую CreateProcess и задаю Chrome.exe в качестве аргумента.

Я получаю дескриптор процесса, который я создал, используя PROCESS_INFORMATION, который внутренне имеет hProcess

Когда я печатаю PID, используя GetProcessId(handle), я получаю другой PID, чем теотображается в диспетчере задач.

Я попытался настроить функцию обратного вызова для запуска после того, как Chrome.exe существует, но он все равно срабатывает.Это ожидаемо (не желательно), поскольку PID Chrome.exe отличается.

Кажется, что когда я использую CreateProcess для Chrome.exe, chrome освобождается, чтобы запустить свой собственный новый процесс и сделать весь мой контроль бесполезным.

Я пытался использовать его с FireFox.exe, и он работал хорошо, я получил указатель на правильный процесс.

Разве невозможно получить дескрипторы процессов Chrome, которые я порождаю?

1 Ответ

0 голосов
/ 12 февраля 2019

Процесс Chrome, который вы порождаете с помощью CreateProcess(), в свою очередь порождает собственный дочерний процесс (процессы), а затем завершает себя.Ваш Firefox этого не делает, по крайней мере, изначально (Firefox использует дочерние процессы для вкладок браузера - большинство современных браузеров используют для безопасности и стабильности).

Итак, PID / дескриптор Chrome вы получаете от CreateProcess() хотя и допустимо, недолговечно и явно бесполезно для ваших нужд.

Но еще не все потеряно.Вы можете получить уведомление о дочерних PID, которые создаются Chrome.Добавьте ваш порожденный процесс Chrome к объекту задания , затем используйте SetInformationJobObject(), чтобы назначить это задание для порта завершения ввода / вывода , затем используйте GetQueuedCompletionStatus() для получения событий из задания, в частности JOB_OBJECT_MSG_NEW_PROCESS всякий раз, когда в задании создается новый процесс, и JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO, когда все процессы в задании завершены.См. Как дождаться завершения всех процессов в задании? для получения более подробной информации.

...