Как проверить, запущен ли данный процесс при наличии дескриптора - PullRequest
6 голосов
/ 27 июня 2011

Я использую ShellExecuteEx для запуска приложения. После успешного запуска я читаю TShellExecuteInfo.hProcess чтобы получить дескриптор запущенного процесса.

Я хотел бы периодически проверять, запущен ли процесс, запущенный моим приложением. Две или более процессов с одним и тем же именем могут выполняться одновременно, и я хочу быть уверен, что мое приложение проверяет правильный процесс.

Я хочу иметь возможность сделать это в системах Windows с Windows 2000 и выше.

Я знаю, что есть функция WinAPI GetProcessId, которая делает именно то, что я хочу, но не поддерживает Windows 2000.

Спасибо за ваши ответы.

1 Ответ

14 голосов
/ 27 июня 2011

Вызовите WaitForSingleObject для этого дескриптора и используйте параметр времени ожидания, равный нулю.Если процесс все еще выполняется, функция вернет Wait_Timeout;если процесс завершился, он вернет Wait_Object_0 (поскольку завершение процесса приводит к тому, что его дескрипторы становятся сигнализированными .)

Если вы хотите знать, каков статус выхода процесса, затем позвоните GetExitCodeProcess.

...