Я недавно столкнулся с этой проблемой и нашел решение, поэтому хотел поделиться со всеми вами. Это все правильно, как мы должны получить управление процессом. Однако вместо WaitForSingleOBject я бы рекомендовал использовать объектную функцию RegisterWaitForSingle. С помощью этой функции вы предоставляете функцию обратного вызова, и всякий раз, когда процесс завершается, вызывается ваша функция обратного вызова. Это лучше, чем вызывать WaitForSingleObject в потоке. Вызов WaitForSingleObject в вашем коде сам по себе заставит ваш код ожидать завершения процесса. Вот пример того, как это назвать:
RegisterWaitForSingleObject(&waitHandle, processHandle, ProcessTerminatedCallback, param, INFINITE, WT_EXECUTEONLYONCE);
Где:
[out] waitHandle - новый дескриптор, созданный для вас. Обратите внимание, что вы не можете использовать этот дескриптор для вызова CloseHandle, но вы можете подождать его, если хотите.
[in] processHandle - дескриптор процесса, который вы должны получить сами
[in] ProcessTeridityCallback - функция обратного вызова, которая будет вызываться при выходе из процесса
[in] param - параметр LPVOID, который будет передан обратному вызову
[in] БЕСКОНЕЧНО - либо ждать бесконечно, либо в течение указанного времени, найдите MSDN для получения дополнительной информации
[in] WM_EXECUTEONLYONCE - вызовет функцию обратного вызова только один раз. посмотрите MSDN для получения дополнительной информации