Как узнать, что системе требуется перезагрузка после установки обновлений
Как узнать, что системе требуется перезагрузка после установки обновлений
Ранее я рассказывал, как можно отключить принудительную перезагрузку при установке обновлений Windows. Сегодня копнем немного глубже, а именно научимся программно определять, что система ожидает эту самую перезагрузку. Зачем это нужно? Например, такое состояние означает, что некоторые файлы из пакета обновлений установлены не до конца, а значит лучше не производить никаких рискованных действий типа массированных инсталляций.
Но перезагрузка системы требуется не только после установки обновлений. Вот для расширения кругозора табличка с далеко не полным списком условий состояния реестра, при выполнении любого из которых система Windows будет ожидать перезагрузки.
Ключ реестра | Условие |
---|---|
HKLM\SOFTWARE\Microsoft\Updates | Значение параметра UpdateExeVolatile отличается от 0 |
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager | Параметр PendingFileRenameOperations существует |
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager | Параметр PendingFileRenameOperations2 существует |
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired | Ключ существует |
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending | Существует любой из вложенных GUID ключей |
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting | Ключ существует |
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce | Параметр DVDRebootSignal существует |
HKLM\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending | Ключ существует |
HKLM\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress | Ключ существует |
HKLM\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending | Ключ существует |
HKLM\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts | Ключ существует |
HKLM\SYSTEM\CurrentControlSet\Services\Netlogon | Параметр JoinDomain существует |
HKLM\SYSTEM\CurrentControlSet\Services\Netlogon | Параметр AvoidSpnSet существует |
HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName | Значения параметров ComputerName в этих ключах отличаются |
Столь обширные ковыряния в реестре я оставлю на потом, меня интересует только ожидание перезагрузки после установки обновлений. В данном случае я предпочту воспользоваться программистскими методами. А помочь в этом может COM-объект SystemInformation, через метод которого можно узнать, требуется ли компьютеру перезагрузка. Как обычно, начинаем с описания интерфейсов и необходимых констант.
Code (Assembler) : Убрать нумерацию
- ; GUID {C01B9BA0-BEA7-41BA-B604-D0A36F469133}
- CLSID_SystemInformation dd 0C01B9BA0h
- dw 0BEA7h
- dw 041BAh
- db 0B6h, 004h, 0D0h, 0A3h, 06Fh, 046h, 091h, 033h
- ; GUID {ADE87BF7-7B56-4275-8FAB-B9B0E591844B}
- IID_ISystemInformationDispatch dd 0ADE87BF7h
- dw 07B56h
- dw 04275h
- db 08Fh, 0ABh, 0B9h, 0B0h, 0E5h, 091h, 084h, 04Bh
- ; IID_ISystemInformation Interface
- struct ISystemInformationDispatch
- QueryInterface dd ?
- AddRef dd ?
- Release dd ?
- GetTypeInfoCount dd ?
- GetTypeInfo dd ?
- GetIDsOfNames dd ?
- _Invoke dd ?
- ; ISystemInformation
- get_OemHardwareSupportLink dd ?
- get_RebootRequired dd ?
- ends
- CLSCTX_INPROC_SERVER = 1
- S_OK = 0
Code (Assembler) : Убрать нумерацию
- ; Инициализировать COM-объект
- invoke CoInitialize,NULL
- ; Создать объект
- invoke CoCreateInstance,CLSID_SystemInformation,NULL,\
- CLSCTX_INPROC_SERVER,\
- IID_ISystemInformationDispatch,pISiDisp
- cmp eax,S_OK
- jne loc_exit
- ; Требуется перезагрузка?
- mov eax, [pISiDisp]
- mov eax, [eax]
- stdcall dword [eax+ISystemInformationDispatch.get_RebootRequired],\
- [pISiDisp],is_reboot
- ; В переменной is_reboot полученный статус
- ; -1 = перезагрузка требуется
- ; 0 = перезагрузка не требуется
- ...
- ...
- ...
- ; Удалить объект
- invoke CoUninitialize
В приложении пример программы с исходным текстом, которая определяет, требуется ли системе перезагрузка после установки обновлений или нет.
Просмотров: 1978 | Комментариев: 0
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария