Windows Server 2016: come risolvere l’errore 0x80245002 nell’installazione dei cumulativi KB5036609/KB5036899 (guida completa)

Su Windows Server 2016 gli aggiornamenti cumulativi KB5036609 e KB5036899 possono fallire con errore 0x80245002: il sistema scarica e installa, ma al riavvio segnala “Installazione non riuscita”. In questa guida trovi una procedura completa e verificata per risolvere in modo strutturato e ripetibile.

Indice

Scenario e sintomi

Ambiente con più server Windows Server 2016 (Datacenter/Standard) in cui l’installazione dei rollup mensili KB5036609 e KB5036899 non va a buon fine. La sequenza tipica è: download, installazione, richiesta di riavvio; al boot compare lo stato Failed con codice 0x80245002 (“Failed to obtain … redir SecondaryServiceAuth URL”). Il comportamento può ripresentarsi anche con altri cumulativi.

Perché appare 0x80245002

L’errore rimanda a un problema del Windows Update Agent durante il recupero delle informazioni di autenticazione/redirect verso i servizi di aggiornamento. Nella pratica, le cause ricorrenti sono:

  • Stack di manutenzione (SSU) non aggiornato: il pacchetto cumulativo richiede un SSU minimo già presente.
  • Connettività HTTPS/TLS 1.2 non pienamente operativa (proxy, ispezione TLS, firewall, suite di cifratura vincolate).
  • Agente Windows Update corrotto o cache incoerente (SoftwareDistribution, catroot2).
  • Politiche WSUS/GPO che reindirizzano o limitano l’accesso agli endpoint Microsoft.
  • Interferenze di antivirus/EDR durante la fase di commit dei componenti CBS.

Checklist rapida (risoluzione in breve)

  1. Verifica e installa l’ultimo Servicing Stack Update (SSU).
  2. Abilita e forza TLS 1.2 per WinHTTP/Schannel e testa le destinazioni *.windowsupdate.com.
  3. Esegui un reset completo dei componenti Windows Update (incluso msiserver).
  4. Disattiva temporaneamente antivirus/EDR e disabilita WSUS per un test puntuale (UseWUServer=0).
  5. Installa i pacchetti offline (prima SSU, poi LCU) con wusa o DISM.
  6. Se ancora KO: analizza WindowsUpdate.log e CBS.log, valuta DISM offline o in‑place repair.

Prerequisiti e buone pratiche

  • Pianifica in finestra di manutenzione, snapshot se VM e backup del sistema.
  • Verifica spazio libero su C: (almeno 10–15 GB; meglio 20 GB per i rollup). Se serve, esegui StartComponentCleanup (vedi sotto).
  • Sincronizza l’orologio: w32tm /resync /force (skew temporale e TLS non vanno d’accordo).
  • Controlla riavvii pendenti: se esiste la chiave RebootPending il commit può essere bloccato.

Diagnostica già effettuata (riepilogo)

PassaggioDettagli
Strumento di risoluzione problemi Windows UpdateEseguito senza successo duraturo.
Installazione manuale dei pacchettiDownload dal Catalogo Microsoft Update → risultato negativo.
Reset componenti Windows UpdateArresto BITS, wuauserv, appidsvc, cryptsvc → rinomina SoftwareDistribution e catroot2 → riavvio servizi.
Pulizia discoLiberati ~20 GB su unità C:.
Integrità del sistemasfc /scannow e DISM /Online /Cleanup-Image /RestoreHealth completati senza errori critici.
Riavvii multipliNessun cambiamento; l’update rimane in stato “failed”.

Procedura risolutiva dettagliata

Controllo/aggiornamento Servicing Stack Update (SSU)

Windows Server 2016 richiede il Servicing Stack aggiornato per gestire correttamente i rollup cumulativi.

  1. Verifica gli SSU installati: dism /online /get-packages /format:table | findstr /i "servicing stack" wmic qfe | find "Servicing Stack" Get-HotFix | Where-Object {$_.HotFixID -match "KB"} | Sort-Object InstalledOn -Descending
  2. Se manca l’ultimo SSU disponibile per la tua build, installalo per primo (offline con wusa o dism, vedi più avanti).

Nota: gli SSU non richiedono disinstallazione dei LCU; in genere si installano senza riavvio ma è consigliato riavviare prima del cumulativo.

Forzare TLS 1.2 e verificare la connettività

Molti ambienti 2016 usano policy/proxy che depotenziano TLS. Assicurati che TLS 1.2 sia abilitato lato Schannel, WinHTTP e .NET (per strumenti di gestione):

rem --- Abilita TLS 1.2 (Schannel: Client & Server)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v Enabled /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f

rem --- Abilita protocolli sicuri per WinHTTP (DefaultSecureProtocols)
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" /v DefaultSecureProtocols /t REG_DWORD /d 0x00000A00 /f

rem --- .NET 4.x usa TLS di sistema/forti cifre
reg add "HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319" /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319" /v SchUseStrongCrypto       /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\WOW6432Node\Microsoft.NETFramework\v4.0.30319" /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\WOW6432Node\Microsoft.NETFramework\v4.0.30319" /v SchUseStrongCrypto       /t REG_DWORD /d 1 /f 

Test veloci (PowerShell):

Test-NetConnection download.windowsupdate.com -Port 443
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -UseBasicParsing -Uri https://s.update.microsoft.com -Headers @{"Cache-Control"="no-cache"} -TimeoutSec 20

Se usi proxy, controlla:

netsh winhttp show proxy
netsh winhttp reset proxy

Oppure importa le impostazioni del browser del servizio Network Service (se previste in policy). Evita l’ispezione TLS sugli endpoint di aggiornamento.

Reset completo di Windows Update (incluso msiserver)

Ripeti il reset con l’intera sequenza di servizi e cache.

rem Esegui come amministratore
net stop bits
net stop wuauserv
net stop appidsvc
net stop cryptsvc
net stop msiserver

del /q /f %ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader\qmgr*.dat
ren %systemroot%\SoftwareDistribution SoftwareDistribution.old
ren %systemroot%\System32\catroot2 catroot2.old

rem (Opzionale) Re‑register di componenti WU
for %%i in (atl.dll urlmon.dll mshtml.dll shdocvw.dll browseui.dll jscript.dll vbscript.dll scrrun.dll msxml.dll msxml3.dll msxml6.dll
actxprxy.dll softpub.dll wintrust.dll dssenh.dll rsaenh.dll gpkcsp.dll sccbase.dll slbcsp.dll cryptdlg.dll oleaut32.dll
ole32.dll shell32.dll wuapi.dll wuaueng.dll wucltux.dll wups.dll wups2.dll wuwebv.dll qmgr.dll qmgrprxy.dll wuweb.dll) do regsvr32 /s %%i

net start msiserver
net start cryptsvc
net start appidsvc
net start wuauserv
net start bits

rem Pulisci cartelle vecchie dopo il riavvio, se non più in uso 

Nota: nelle versioni moderne regsvr32 su alcuni componenti è superfluo, ma in ambienti con registrazioni incoerenti può sbloccare l’engine.

Verifica GPO/WSUS e reindirizzamenti

Controlla le policy che forzano l’uso di WSUS: Computer Configuration → Administrative Templates → Windows Update → Specify intranet Microsoft update service location. Per testare direttamente contro Microsoft Update:

reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v UseWUServer /t REG_DWORD /d 0 /f
gpupdate /force
net stop wuauserv & net start wuauserv
UsoClient StartScan

Se la policy torna attiva, significa che esiste una GPO che la reinserisce; correggi a monte (o crea un OU di test senza il link).

Disattiva temporaneamente antivirus/EDR/Firewall

Alcuni agenti intercettano i processi di aggiornamento e la scrittura dei manifest CBS. Durante i test, disattiva le protezioni in modo controllato o aggiungi esclusioni per: %windir%\SoftwareDistribution, %windir%\Logs\CBS, %windir%\winsxs, servizi TrustedInstaller/TiWorker, e le directory temporanee di estrazione.

Installazione offline: prima SSU, poi LCU

Dopo aver scaricato i pacchetti dal Catalogo Microsoft Update (SSU e LCU corretti per architettura/edizione):

  • Wusa (online): wusa.exe C:\Patch\SSU.msu /quiet /norestart /log:%SystemRoot%\Logs\SSU_install.log wusa.exe C:\Patch\KB5036609.msu /quiet /norestart /log:%SystemRoot%\Logs\KB5036609_install.log wusa.exe C:\Patch\KB5036899.msu /quiet /norestart /log:%SystemRoot%\Logs\KB5036899_install.log shutdown /r /t 0
  • DISM (online): dism /online /add-package /packagepath:C:\Patch\SSU.msu /logpath:%SystemRoot%\Logs\SSU_dism.log dism /online /add-package /packagepath:C:\Patch\KB5036609.msu /logpath:%SystemRoot%\Logs\KB6609_dism.log dism /online /add-package /packagepath:C:\Patch\KB5036899.msu /logpath:%SystemRoot%\Logs\KB6899_dism.log

Se l’agente continua a fallire, passa a DISM offline (vedi sezione avanzata).

Analisi dei log: cosa cercare davvero

WindowsUpdate.log (Server 2016)

Su 2016 il log tradizionale è generato unendo i trace ETW:

Get-WindowsUpdateLog -LogPath C:\Windows\Logs\WindowsUpdate\WindowsUpdate.log

Punti d’attenzione:

  • Eventi con “SecondaryServiceAuth”, “Redirector”, “ServiceUrl” → problemi di autenticazione/redirect.
  • Timeout o 0x80072xxx → problemi di rete/TLS/proxy.
  • 401/403 via WinHTTP → ispezione TLS o proxy autenticante non compatibile con il servizio update.

CBS.log

Il log di Component Based Servicing è in %windir%\Logs\CBS\CBS.log. Cerca:

  • “Failed to resolve package” o “pin deployment” → component store incoerente.
  • “Mark package for revert” → fallimento in commit; spesso con AV o file lock.
  • 0x800f08xx / 0x800f09xx → manifest mancanti o riferimenti incrociati.

Abbina con DISM /Online /Cleanup-Image /ScanHealth (già fatto) e, se serve, indica una Source valida (install.wim) per un RestoreHealth più incisivo:

dism /online /cleanup-image /restorehealth /source:WIM:D:\sources\install.wim:1 /limitaccess

Ottimizzazioni di manutenzione WinSxS

Per ridurre la pressione sullo store dei componenti senza influire sulla possibilità di disinstallare, avvia:

dism /online /cleanup-image /StartComponentCleanup

Solo se accetti di non poter disinstallare alcuni update storici, aggiungi /ResetBase (usa cautela su server di produzione).

Approcci avanzati

DISM offline dalla WinRE/ISO

  1. Avvia in WinRE o da ISO di Windows Server 2016.
  2. Identifica la lettera dell’OS (es. C:) e dell’ISO (es. D:).
  3. Installa gli MSU offline: dism /image:C:\ /add-package /packagepath:D:\Patch\SSU.msu dism /image:C:\ /add-package /packagepath:D:\Patch\KB5036609.msu dism /image:C:\ /add-package /packagepath:D:\Patch\KB5036899.msu dism /image:C:\ /cleanup-image /restorehealth /source:WIM:D:\sources\install.wim:1 /limitaccess
  4. Riavvia normalmente e verifica con Get-HotFix.

Pendings nel registro (solo con backup e consapevolezza)

Se il commit resta bloccato e sei certo che non ci siano installazioni in corso:

  1. Esegui backup del registro o snapshot.
  2. Controlla e, se orfane, ripulisci chiavi in:
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Pending
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\SessionsPending

Avvertenza: intervenire su CBS a caldo è delicato; preferisci sempre DISM/WinRE quando possibile.

Bypass temporaneo di WSUS per un test

Se sospetti un problema lato WSUS (catalogo obsoleto, approvazioni, SSL/old cipher), prova un ciclo diretto su Microsoft Update come già mostrato (UseWUServer=0) e verifica se il codice 0x80245002 scompare. In caso positivo, investi sul canale WSUS: aggiornamenti del server WSUS, sincronizzazioni, eventuali sostituzioni di certificati, pulizia DB.

Rigenerazione di catroot2 con ACL corrette

net stop cryptsvc
takeown /f %systemroot%\system32\catroot2 /a /r /d y
icacls %systemroot%\system32\catroot2 /grant:r "NT SERVICE\CryptSvc:(OI)(CI)F" /t
ren %systemroot%\system32\catroot2 catroot2.bak
net start cryptsvc

In‑place upgrade/repair

Quando tutto il resto fallisce, un repair install con la stessa edizione/build:

  1. Monta ISO di Server 2016 corrispondente (lingua/edizione).
  2. Esegui setup.exe mantenendo app e dati.
  3. Durante il wizard, disattiva la Dynamic Update (per evitare di toccare subito i servizi di update).

Questo rigenera l’agente Windows Update e i componenti CBS senza impatto su ruoli e feature, ma richiede finestra e backup.

Verifica finale dell’esito

  • Storico aggiornamenti: assicurati che KB5036609/KB5036899 risultino Installati.
  • Query hotfix: Get-HotFix | Where-Object {$_.HotFixID -in @('KB5036609','KB5036899')} | Format-Table -AutoSize wmic qfe | find "5036609" wmic qfe | find "5036899"
  • Event Viewer: nessun errore critico WUSA/WindowsUpdateClient in Applications and Services Logs → Microsoft → Windows → WindowsUpdateClient.
  • Riavvii pendenti: assenti (RebootPending), TiWorker non in loop e CPU/IO normalizzati.

Domande frequenti e casi ricorrenti

SegnaleSignificatoRimedio
0x80245002 + proxy autenticanteIl servizio update non tollera l’intermediario o il MITM TLS.Escludi gli endpoint di update dall’ispezione, usa PAC o “direct” per quei domini, abilita TLS 1.2 end‑to‑end.
0x80072EE2/0x80072EFETimeout/connessione abortita (rete).Verifica firewall, MTU/PMTUD, proxy, bilanciatore e Test‑NetConnection su porta 443.
Commit fallito in CBSFile lock/AV o component store incoerente.Disattiva AV, esegui DISM RestoreHealth con Source e valuta StartComponentCleanup.
WSUS approvazioni ok ma client fallisceRedirect/URL auth non recuperabile dal client.Test diretto su Microsoft Update (UseWUServer=0). Se funziona, rivedi SSL e catalogo di WSUS.

Automazione: script PowerShell “tutto-in-uno”

Usa lo script seguente su un singolo server pilota. Salvalo come Fix‑WU‑0x80245002.ps1 ed eseguilo come amministratore. Personalizza i percorsi dei pacchetti.

#requires -RunAsAdministrator
param(
  [string]$PatchFolder = "C:\Patch",
  [string[]]$Kbs = @("KB5036609","KB5036899"),
  [switch]$BypassWsus
)

Write-Host "=== Preflight ==="
w32tm /resync /force | Out-Null
$services = "bits","wuauserv","appidsvc","cryptsvc","msiserver"

Write-Host "Arresto servizi WU..."
$services | ForEach-Object { sc.exe stop $_ | Out-Null; Start-Sleep -Seconds 2 }

Write-Host "Pulizia cache..."
Get-ChildItem "$env:ALLUSERSPROFILE\Application Data\Microsoft\Network\Downloader" -Filter "qmgr*.dat" -ErrorAction SilentlyContinue | Remove-Item -Force -ErrorAction SilentlyContinue
Rename-Item "$env:SystemRoot\SoftwareDistribution" "SoftwareDistribution.old" -ErrorAction SilentlyContinue
Rename-Item "$env:SystemRoot\System32\catroot2" "catroot2.old" -ErrorAction SilentlyContinue

Write-Host "Abilitazione TLS 1.2..."
New-Item "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Force | Out-Null
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name Enabled -Value 1 -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name DisabledByDefault -Value 0 -PropertyType DWord -Force | Out-Null
New-Item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" -Force | Out-Null
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" -Name DefaultSecureProtocols -Value 0xA00 -PropertyType DWord -Force | Out-Null

if ($BypassWsus) {
Write-Host "Bypass WSUS attivo (UseWUServer=0)..."
New-Item "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name UseWUServer -Value 0 -PropertyType DWord -Force | Out-Null
}

Write-Host "Riavvio servizi..."
$services | ForEach-Object { sc.exe start $_ | Out-Null }

Write-Host "Test connettività verso update..."
try {
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
(Invoke-WebRequest -UseBasicParsing -Uri "[https://s.update.microsoft.com](https://s.update.microsoft.com)" -TimeoutSec 15).StatusCode | Out-Null
Write-Host "OK TLS 1.2."
} catch { Write-Warning "Verifica TLS fallita: $($_.Exception.Message)" }

Installazione SSU se presente nella cartella

$ssu = Get-ChildItem $PatchFolder -Filter "ServicingStack*.msu" -ErrorAction SilentlyContinue | Sort-Object Name -Descending | Select-Object -First 1
if ($ssu) {
Write-Host "Installo SSU: $($ssu.Name)"
Start-Process -FilePath "wusa.exe" -ArgumentList "`"$($ssu.FullName)`" /quiet /norestart" -Wait
}

Installazione dei KB target

foreach ($kb in $Kbs) {
$pkg = Get-ChildItem $PatchFolder -Filter "$kb.msu" -ErrorAction SilentlyContinue | Select-Object -First 1
if ($pkg) {
Write-Host "Installo $kb ..."
Start-Process -FilePath "wusa.exe" -ArgumentList "`"$($pkg.FullName)`" /quiet /norestart" -Wait
} else {
Write-Warning "Pacchetto $kb non trovato in $PatchFolder"
}
}

Write-Host "Generazione WindowsUpdate.log ..."
Get-WindowsUpdateLog -LogPath "$env:SystemRoot\Logs\WindowsUpdate\WindowsUpdate.log" | Out-Null

Write-Host "Controllo hotfix:"
Get-HotFix | Where-Object {$_.HotFixID -in $Kbs} | Format-Table -AutoSize
Write-Host "Operazione completata. Riavviare il server per finalizzare."

Quando aprire un’analisi mirata

Se, nonostante SSU + TLS 1.2 + reset + installazione offline, il codice 0x80245002 persiste:

  • Allega CBS.log e WindowsUpdate.log (nuovo) isolando gli ultimi 30–60 minuti.
  • Indica se con UseWUServer=0 gli update si installano.
  • Specifica se l’ambiente usa proxy autenticante o ispezione TLS.
  • Valuta in‑place repair per rigenerare i componenti di aggiornamento senza perdita di dati/applicazioni.

Conclusioni

Il codice 0x80245002 punta a una rottura nell’handshake tra l’agente Windows Update e i servizi di aggiornamento (auth/redirect). Dopo aver confermato l’integrità del sistema, i tre pilastri che sbloccano la maggior parte dei casi sono:

  1. Applicare l’SSU più recente (sempre prima del cumulativo).
  2. Garantire la connettività TLS 1.2 end‑to‑end (niente ispezione, cipher aggiornati, proxy correttamente configurato o escluso).
  3. Installare offline i pacchetti (WUSA/DSIM) dopo un reset totale di Windows Update, disattivando temporaneamente AV/EDR.

Se la sequenza fallisce ancora su più host, la raccolta mirata dei log e, in ultima istanza, un repair in‑place sono le strategie più efficaci per riportare in salute l’agente di aggiornamento e stabilizzare i cicli futuri.


Appendice: tabella “azioni & responsabilità” per rollout su più server

FaseResponsabileAttivitàOutput atteso
Pre‑flightOpsBackup, snapshot, verifica spazio, riavvii pendentiChecklist firmata
Rete/TLSSecNetEsclusioni proxy/ispezione, abilitazione TLS 1.2Test-NetConnection/IWR OK
AgentOpsReset WU completo, SSU installatoServizi WU stabili
InstallazioneOpsWUSA/DSIM SSU → LCUKB installati, nessun pending
VerificaNOCGet-HotFix, eventi, prestazioniReport di conformità
EscalationOpsRaccolta log, DISM offline, repair in‑placeRisoluzione o piano di remediation

Appendice: comandi utili “da tasca”

:: Avvia scansione/installa via USOClient (2016)
UsoClient StartScan
UsoClient StartDownload
UsoClient StartInstall
UsoClient ScanInstallWait

:: Pulizia componenti
Dism /Online /Cleanup-Image /StartComponentCleanup

:: Verifica spazio e cartelle di lavoro
dir %systemroot%\SoftwareDistribution /a /s
dir %systemroot%\winsxs /a /s

:: Elenco rapido hotfix
wmic qfe list brief /format:table

:: Riavvio immediato
shutdown /r /t 0 

Nota operativa: durante i test, cambia una variabile alla volta (es. prima TLS, poi reset, poi WSUS). Così puoi identificare con precisione la causa primaria e replicare il fix sugli altri server con maggiore confidenza.

Indice