Проверка «живости» приложения Windows? - PullRequest
5 голосов
/ 14 марта 2012

У меня есть приложение для Windows, на котором установлено дорогостоящее оборудование;это приложение умирает различными творческими способами.Обычно, когда это происходит, процесс полностью умирает.Я написал небольшую программу мониторинга, которая ищет имя процесса в списке объектов, которые в данный момент выполняются, и это прекрасно работает для этих сбоев.Но иногда он просто перестает отвечать на запросы и требует завершения через диспетчер задач, но все еще «работает» в некотором бесполезном смысле.

Я совершенно незнаком с Windows API, так что, возможно, это довольно напряженно,но что я могу сделать, чтобы программно проверить «живучесть» других процессов?Или что я мог бы использовать, чтобы угадать?(Следя за тем, чтобы он прекратил обрабатывать события из ОС, или чтобы весь доступ к диску / распределение памяти было остановлено и т. Д., И т. Д.)

Желательно, чтобы я мог что-то сделать с помощью модуля Python win32, но я 'Я разветвляюсь на все, что может успешно обнаружить, когда эта штука блокируется.И я понимаю, что «живость» является расплывчатой, но я не хочу ничего исключать, особенно когда у меня нет никакого понимания того, как эта вещь действительно терпит неудачу.

Ответы [ 2 ]

4 голосов
/ 14 марта 2012

Я думаю, что лучший способ добиться этого - использовать функции Process & Thread в WIN32 API. NB: Вы можете легко встроить код C ++ в python Это, вероятно, потребует некоторого времени и терпения, и я сам не знаю большинство этих функций.

С другой стороны, есть подробный проект по Мониторинг процесса по Codeproject и Python WMI , оболочка для WMI в python, но помните, что WMI значительно медленен, и у вас есть чтобы убедиться, что служба работает на ПК.

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

3 голосов
/ 14 марта 2012

Вам нужно получить дескриптор HWND для рассматриваемого окна (EnumWindowHandles может быть хорошим началом), а затем попробуйте вызвать IsHungAppWindow, чтобы увидеть, считает ли система, что оно не отвечает.

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