To pokazuje wysoko w wyszukiwarce Google „Zainstaluj i uruchom ponownie, nie instaluj i nie zamykaj”. Dlatego pomyślałem, że powinienem dodać rozwiązanie, które ostatecznie napisałem na ten właśnie irytujący problem (ludzie mówią mi, że Win10 ma to domyślnie, ale nie jestem na Win10).
Działa to przy użyciu dwóch plików wsadowych. Pierwszy nazywa się „rebootAfterUpdates.bat”
@echo OFF
@setlocal ENABLEEXTENSIONS
@set REBOOT_KEY="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"
@SET REGDWORD=REG_DWORD
@SET VALUEVAL=0x1
@REM skip=4 may be required on some versions of Windows
@FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`reg query %REBOOT_KEY% /s 2^>nul`) DO (
@IF %%B EQU %REGDWORD% (
@IF %%C EQU %VALUEVAL% (
call :REBOOT
)
)
)
:NOREBOOT
@Echo No reboot required
exit /b 36877
REM 36877 is 0x900D (i.e. Good, no reboot required)
:REBOOT
@ECHO Here We REBOOT
SHUTDOWN -r -f -t 10
exit /b 3059719
REM 3059719 is 0x2EB007 (i.e. REBOOT was triggered)
Drugi nazywa się „scheduleRebootAfterUpdates.bat”:
@schtasks /query /TN RebootAfterUpdates > doh
@findstr /B /I "RebootAfterUpdates" doh >nul
@if %errorlevel%==0 goto :update
@goto :create
:update
@del doh
@SCHTASKS /Change /TN RebootAfterUpdates /SD %DATE%
@echo Task updated to execute today
@goto :exitBat
:create
@del doh
@SCHTASKS /Create /SC ONCE /TN RebootAfterUpdates /TR "C:\tmp\Scripts\rebootAfterUpdates.bat" /ST 23:55 /sd %DATE% /ru SYSTEM /f
@echo Task created. Set the "Wake to Execute Flag" through Task Scheduler GUI
:exitBat
@exit /b
Zakłada się, że oba pliki znajdują się w C: \ tmp \ Scripts \ Gdy system Windows wyświetli komunikat „Zainstaluj aktualizacje”, zacznij instalować aktualizacje. Podczas instalowania aktualizacji uruchom „scheduleRebootAfterUpdates.bat”.
Tło operacji:
Jeśli aktualizacje wymagają ponownego uruchomienia, niektóre klucze rejestru (w ramach klucza reg WindowsUpdate) mają wartość 0x1.
Sprawdzamy, czy te klucze istnieją w pierwszym pliku nietoperzy. Jeśli tak, zrestartuj komputer natychmiast.
Zwykle uruchamiam aktualizacje, kiedy mam wyjść z pracy (i około 4-5 godzin przed północą).
Drugi nietoperz tworzy zaplanowane zadanie (lub aktualizuje istniejące zadanie do uruchomienia 5 minut przed północą) i to zaplanowane zadanie wykonuje pierwszy nietoperz.
Więc ... chociaż nie jest to najbardziej eleganckie rozwiązanie, w dwóch krokach (1. uruchom „Zainstaluj aktualizacje” i 2. uruchom drugi plik nietoperza), komputer uruchomi się ponownie o północy, zakładając, że instalacja aktualizacji się powiodła.
Ponadto można ustawić opcję „Obudź maszynę do wykonania zadania” z GUI Harmonogramu zadań, a także sprawdzić kod powrotu wykonania, aby zobaczyć, co się stało ostatnim razem.
PS Przetestowano na Win7 64bit.