В ожидании завершения процесса? [VS9 C ++] - PullRequest
0 голосов
/ 05 ноября 2011

В моей системе есть приложение (App.exe), которое запускается, но иногда оно завершается (изящно и ожидаемо). В то же время у меня есть другое приложение, которое при остановке App.exe должно выполнять определенные задачи. Поэтому мне нужен способ контролировать App.exe из моего приложения.

Что-то вроде того, что я пытаюсь выполнить

If (App.exe is running wait 360 seconds for it to terminate)
   if (App.exe is not running anymore)
      do the work I need to do when App.exe is NOT running

Итак, они КЛЮЧ:

  • как мне оценить, работает ли App.exe
  • как мне ждать 360 секунд, пока он закроется (если он все еще работает)

Теперь это не очень сложно, если мое приложение - это запущенный / spwaned App.exe (использующий вещи CreateProcess и WaitForExit), но в этом случае я не контролирующий агент ... так как мне следить, чтобы увидеть если App.exe все еще работает и, следовательно, подождите (в течение периода времени X) его завершения, прежде чем делать что-то конкретное?

Будем весьма благодарны за любые советы, помощь или рекомендации. Спасибо,

Ответы [ 3 ]

1 голос
/ 05 ноября 2011

Вы можете использовать API ToolHelp (CreateToolhelp32Snapshot с TH32CS_SNAPPROCESS и Process32Next), чтобы получить идентификатор процесса любых запущенных процессов app.exe.Исходя из этого, вы можете использовать OpenProcess для получения дескриптора, который затем можно использовать для ожидания завершения.

0 голосов
/ 05 ноября 2011

Как насчет вызова FindWindow, чтобы получить дескриптор (или дескрипторов, если приложение может иметь несколько экземпляров, или изменение его названия на основе открытых документов), вызова GetWindowThreadProcessId и OpenProcess для его преобразования, а затем вызова WaitForSingleObject?

0 голосов
/ 05 ноября 2011

Полагаю, вы могли бы использовать GetProcessesByName ().

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