Errore 0x8007371b durante l’installazione di un aggiornamento di Windows

In questo post analizzerò come è possibile provare a risolvere situazioni in cui un aggiornamento di Windows non viene installato riportando l’errore 0x8007371b. Nello scenario che ho avuto modo di analizzare il problema si è verificato su un computer con Windows 10 LTSC 2021 durante l’installazione della KB5041580.

In Windows Update common errors and mitigation – 0x8007371b è possibile ricavare alcune informazioni circa l’errore 0x8007371b:

Message: ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE; One or more required members of the transaction aren’t present.

Description: Component Store corruption.

Mitigation: Repair the component store with Dism RestoreHealth command or manually repair it with the payload from the partially installed component. From an elevated command prompt and run these commands:
Dism.exe /Online /Cleanup-Image /Restorehealth
Sfc.exe /Scannow
Restart the device.

Nel computer in cui ho riscontrato il problema a nulla è servito utilizzare il Windows Update Troubleshooter, seguire le indicazioni riportate in Troubleshoot problems updating Windows – Microsoft Support o provare ad installare manualmente l’aggiornamento scaricandolo dal Microsoft Update Catalog.

Provando ad installare manualmente l’aggiornamento nel registro eventi veniva registrato il seguente evento di errore:

Nome registro: Setup
Origine: Microsoft-Windows-WUSA
ID evento: 3
Categoria attività:Nessuna
Livello: Errore
Descrizione:
Impossibile installare l’aggiornamento di Windows “Aggiornamento della protezione per Windows (KB5041580)” a causa dell’errore 2147956507 “Uno o più membri obbligatori della transazione non presenti.” (riga di comando: “”C:\WINDOWS\system32\wusa.exe” “C:\Software\windows10.0-kb5041580-x64_b3de56748ec2ba6f57af49e58690585ed0c385ec.msu” “)

Si noti che nella descrizione dell’evento il codice di errore è riportato in notazione decimale, ma 2147956507 corrisponde in notazione esadecimale a 0x8007371b.

Per provare a risolvere questo errore bisogna cercare di riparare i componenti corrotti o mancanti del sistema. Si noti che questo tipo di problema è subdolo perché può verificarsi solo durante l’installazione di alcuni aggiornamenti e non con altri che non necessitano dei componenti corrotti o mancanti del sistema.

Prima di procedere alla descrizione delle operazioni che ho eseguito voglio precisare che tali operazioni possono essere onerose dal punti di vista del tempo impiegato, quindi occorre valutare se non è preferibile reinstallare il sistema. Inoltre prima di procedere al tentativo di ripristinare i componenti corrotti o mancanti del sistema verificare che nel registro di sistema non vi siano eventi di errore che indichino problematiche di tipo hardware a carico di disco o memoria.

Passo 1: Clean UP del Windows Component Store

Un primo tentativo di risolvere il problema può essere quello di di eseguire il clean up del Windows Component Store memorizzato nella cartella C:\Windows\winsxs tramite la seguente procedura:

  1. Eseguire il seguente comando con privilegi amministrativi:
    DISM /Online /Cleanup-Image /StartComponentCleanup
  2. Eseguire il seguente comando con privilegi amministrativi:
    SFC /SCANNOW
  3. Eseguire il seguente comando con privilegi amministrativi:
    DISM /Online /Cleanup-Image /AnalyzeComponentStore
  4. Eseguire il seguente comando con privilegi amministrativi:
    SFC /SCANNOW
  5. Riavviare il sistema
  6. Eseguire il seguente comando con privilegi amministrativi:
    DISM /Online /Cleanup-Image /RestoreHealth

Nel mio caso eseguendo il comando al punto 6 continuava a riportare un errore di corruzione dei componenti di sistema.

Passo 2: Riparazione dei componenti di sistema tramite il file .wim nell’immagine ISO d’installazione

Un secondo tentativo di risolvere il problema può essere quello di eseguire la riparazione dei componenti di sistema tramite il file .wim contenuto nell’immagine ISO d’installazione tramite la seguente procedura. Nel mio caso il contenuto dell’iso d’installazione è stata copiato nella cartella C:\W10Ent64BitLTSC2021Ita. Si noti però che occorre usare un’iso che permetta d’installare il sistema con la stessa versione del sistema che si sta tentando di riparare, per eseguire lo slipstream è possibile usare il comando DISM oppure il tool di terze parti NLite

  1. Eseguire il seguente comando con privilegi amministrativi per ricavare quale è l’indice della versione del sistema operativo da utilizzare tra quelle contenute nel file install.wim:
    DISM /get-wiminfo /wimfile:”C:\W10Ent64BitLTSC2021Ita\sources\install.wim”
    (nel mio caso l’indice corretto era l’1)
  2. Eseguire il seguente comando con privilegi amministrativi specificando l’indice ricavato al punto 1:
    DISM /Online /Cleanup-Image /RestoreHealth /Source:WIM:C:\W10Ent64BitLTSC2021Ita\sources\install.wim:1 /limitaccess
  3. Eseguire il seguente comando con privilegi amministrativi:
    DISM /Online /Cleanup-Image /RestoreHealth

Nel mio caso eseguendo il comando al punto 3 non venivano più riportati errori di corruzione dei componenti di sistema, ma l’aggiornamento continuava a non venire installato con l’errore 0x8007371b.

Passo 3: Riparazione del .NET Framework

Un terzo tentativo di risolvere il problema può essere quello di eseguire la riparazione del .NET Framework, a riguardo si veda Repair .NET Framework dove è disponibile il tool .NET Framework Repair Tool (NetFxRepairTool.exe).

Dopo aver eseguito il tool NetFxRepairTool.exe è possibile verificare che il seguente comando non riporti più errori:

DISM /online /cleanup-image /restorehealth

Passo 4: Reinstallazione inplace del sistema operativo

Un quarto tentativo di risolvere il problema, che nel mio caso è stato risolutivo, può essere quello di eseguire nuovamente il setup dell’iso con cui era stato installato il sistema operativo e installando poi gli aggiornamenti di sistema necessari.