Как программно определить, выключается ли Windows? - PullRequest
4 голосов
/ 29 января 2012

Я делаю приложение, которое запускается на каждом компьютере в случайное время.Он работает нормально, однако, если компьютер в настоящее время выключается, я не могу прочитать WMI, и я получаю некоторые ошибки.Поэтому мне нужно определить, выключается ли сейчас ПК, и чтобы я мог избежать этих ошибок.У кого-нибудь есть идея?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 29 января 2012

Звоните GetSystemMetrics с индексом SM_SHUTTINGDOWN (0x2000).

2 голосов
/ 29 января 2012

Создайте скрытое окно верхнего уровня и слушайте сообщения WM_ENDSESSION. Значение wParam сообщит вам, выходит ли из строя вся система или вышел ли пользователь из системы.

Если ваше приложение является консольным приложением, используйте SetConsoleCtrlHandler для регистрации и получения уведомлений о завершении работы.

1 голос
/ 29 января 2012

Любая попытка обнаружить эту ситуацию будет иметь состояние гонки: выключение системы может начаться сразу после того, как вы обнаружите, что оно не выключается, но до того, как вы попытаетесь выполнить операции, которые не будут работать во время выключения.Таким образом, ваш подход к решению проблемы неверен.Вместо этого вам просто нужно обработать ошибки чтения WMI и определить, являются ли они причиной сбоя системы, и в этом случае прервать операцию или продолжить каким-либо другим способом, который имеет смысл.

Возможно, будет возможно использоватьсвоего рода механизм обнаружения синхронного выключения, где вы можете фактически заблокировать / задержать выключение на короткий промежуток времени, прежде чем оно продолжится, и выполнять обработку в этом интервале.Если так, то это также был бы безопасный подход без условий гонки.

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