Определить перезагрузку - PullRequest
4 голосов
/ 06 января 2010

Есть ли "идентификатор сеанса загрузки" или (надежно) "метка времени загрузки"? Для установки мне нужно определить, что запланированная перезагрузка действительно произошла.

Полагаю, я мог бы сделать манекен MoveFileEx() с MOVEFILE_DELAY_UNTIL_REBOOT, но я надеялся на что-то более простое.

(Мы должны установить сторонний пакет, который иногда работает некорректно после ремонта / обновления. В этом состоянии доступ к устройству может даже заблокировать систему)

(Windows XP, Vista, 7)

Ответы [ 4 ]

4 голосов
/ 06 января 2010

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

Вот также запись в блоге с некоторыми примерами кода: http://blogs.technet.com/heyscriptingguy/archive/2004/09/07/how-can-i-tell-if-a-server-has-rebooted.aspx

В зависимости от языка реализации, вы, вероятно, просто захотите извлечь код запроса из vbscript.

3 голосов
/ 06 января 2010

Очевидно, что в Windows есть эквивалент «времени безотказной работы». Вот больше информации: http://support.microsoft.com/kb/555737

Насколько я понимаю, это должно сказать вам, как давно система была загружена. Эта информация решит вашу проблему?

1 голос
/ 24 июля 2011

Я думаю, что лучший ответ уже был дан здесь: Узнайте, перезагрузился ли компьютер с момента последнего запуска моей программы?

Это кажется самым простым способом. Используйте GlobalFindAtom(), чтобы увидеть, существует ли он, и создайте его, с помощью GlobalAddAtom(), если его нет. Это будет продолжаться после выполнения вашей программы. Если ваше приложение запускается снова и видит, что атом существует, то это не первый запуск с момента перезагрузки.

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

1 голос
/ 06 января 2010

В системном журнале событий можно найти событие 6009 из источника EventLog - это первое событие, записанное после каждой перезагрузки.

...