Как обнаружить обязательную перезагрузку для Windows 7

Я работаю над проектом, в котором на ПК с Windows 7 установлено несколько программ и драйверов. Это должно работать без участия пользователя.

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

Мы работаем над встроенной Windows 7, и панель задач не активирована, а какие-либо подсказки или что-то подобное видно. Программное обеспечение установлено в автоматическом режиме.

Ответ 1

Используйте следующий раздел реестра:

HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

Источник: Как узнать, что MSI, который я только что установил, запросил перезагрузку Windows?

Как было обнаружено задающим вопрос по этому вопросу, HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending показывает, что перезагрузка находится на машине, пока ОС Vista или новее.

Ответ 2

Модуль "PendingReboot" объединяет все упомянутые тесты (+ WMI-зонд CCM) в единый удобный командлет для надежного обнаружения ожидающей перезагрузки:

# Install
Install-Module -Name PendingReboot

# Run
Test-PendingReboot -Detailed

Ответ 3

После долгих исследований я нашел способ запроса отложенных перезапусков с помощью встроенной библиотеки DLL Windows непосредственно в приложении .NET. Основная проблема заключается в том, что может быть много причин, по которым Windows должна перезагружаться. Кроме того, версия для Windows иногда также играет роль.

В ходе исследования я наткнулся на статью, в которой описываются различные сценарии в среде Центра обновления Windows, такие как определение, включена ли служба автоматических обновлений или требуется перезагрузка компьютера. Там вы найдете ссылку на объект Microsoft.Update.SystemInfo, который в итоге привел к тому, что интерфейс ISystemInformation имеет метод ISystemInformation :: get_RebootRequired (Получает логическое значение, указывающее, требуется ли перезагрузка системы для завершения установка или удаление одного или нескольких обновлений.).

Подробнее о путешествии см. в моем блоге Определите программно ожидающий статус перезагрузки для компьютера с Windows в С# и PowerShell.