Определить, была ли перезагрузка Windows из-за обновлений Windows - PullRequest
7 голосов
/ 10 марта 2012

Несколько приложений на моем компьютере делали обнаружение, был ли перезапуск Windows Update или нет.Это наблюдается из-за их перезапуска после автоматической перезагрузки Центра обновления Windows.

Это очень полезно, поскольку эти приложения перезагружают изменения, даже несохраненные изменения или восстанавливают вкладки (в случае браузера).Примеры приложений, которые делают это:

  • Google Chrome
  • Microsoft Visual Studio
  • Microsoft Paint

Во всех случаях приложения сохраняются состояние , в котором они находились до перезагрузки.

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

Мой вопрос: как сделатьЯ программно определяю этот вид перезагрузки?Кажется, он надежно обнаруживается до перезагрузки.

Вопрос Как узнать причину последней перезагрузки Windows может показаться дубликатом, но ни один ответ не сказал ничего об обновлениях.

Я пишу код на C #, поэтому ответ на C # был бы полезен, хотя я тоже могу читать C и C ++, например.

Ответы [ 2 ]

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

См. Перезапуск приложения :

Приложение может использовать восстановление и перезапуск приложения (ARR) для сохранения данных и информации о состоянии до выхода из приложения из-за необработанного исключения или когда приложение перестает отвечать

и

или если компьютер должен перезагрузиться в результате обновления.

Приложения не обнаруживают причину перезапуска после факта - они были спроектированы для использования этого API. Для этого не существует (насколько мне известно) управляемого API.


Пара нажатий - Сохранение данных и состояния приложения при закрытии приложения из-за обновления программного обеспечения . Опять же, нет управляемого API.

0 голосов
/ 10 марта 2012

Обычно, когда Windows перезагружается, он выполняет перезапуск с помощью shutdown.exe и флага / g, который сохраняет состояние всех зарегистрированных запущенных программ перед перезапуском. Что вы хотите сделать, это зарегистрировать приложение для перезапуска. Существует хороший образец с документацией для этого MSDN. Он доступен в C # и C ++.

...