KB5046540 Windows Server 2019 : corriger l’erreur 0x800f0922 lors de la mise à jour .NET (guide complet)

La mise à jour cumulative KB5046540 (.NET 3.5/4.7.2/4.8) refuse de s’installer sur Windows Server 2019 avec l’erreur 0x800f0922 ? Voici un guide pas‑à‑pas, éprouvé sur le terrain, pour corriger la majorité des causes : composants corrompus, partition réservée saturée, proxy/TLS, caches Windows Update, SSU manquante, etc.

Sommaire

Vue d’ensemble de la question

Un administrateur tente d’appliquer la mise à jour cumulative de novembre 2024 KB5046540 visant .NET Framework 3.5, 4.7.2 et 4.8 sur un Windows Server 2019 (build 17763.737). L’installation échoue systématiquement avec le code 0x800f0922, suivi d’un rollback. Cette erreur est typiquement liée à une connexion bloquée vers Windows Update/WSUS, une partition réservée système (SRP) trop petite, des composants CBS/Winsxs endommagés ou des services/caches Windows Update en défaut.

Symptômes observés

  • Historique Windows Update : « Échec de l’installation – 0x800f0922 » pour KB5046540.
  • Journal CBS.log : mention de rollback (Failed to finalize, error = 0x800f0922) ou d’échec de montage de package .NET.
  • Serveur derrière proxy/VPN/WSUS : détection/téléchargement impossibles, erreurs BITS, ou Pending restart persistant.

Chemin court recommandé

  1. Réparer les fichiers système : cmd /c sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth
  2. Vérifier les pilotes défectueux : Gestionnaire de périphériques → repérer les triangles jaunes → Mettre à jour ou Désinstaller.
  3. Lancer l’utilitaire de résolution des problèmes Windows Update : Paramètres → Mise à jour et sécurité → Dépannage → Windows Update → Exécuter l’utilitaire.
  4. Redémarrer le serveur, relancer la recherche de mises à jour, puis réessayer KB5046540.

Si cela échoue encore, poursuivez avec la procédure détaillée ci‑dessous ; elle couvre les cas SRP saturée, caches corrompus, SSU manquante, problèmes de proxy/TLS et scénarios .NET spécifiques.

Pourquoi l’erreur 0x800f0922 survient

  • Partition réservée système trop petite (< 500 Mo) : le moteur CBS/Winsxs ne peut pas écrire les métadonnées de démarrage nécessaires aux mises à jour .NET.
  • Connexion bloquée via proxy/VPN/pare‑feu ou protocole TLS 1.2 désactivé : impossible de contacter les services Windows Update/WSUS/CRL.
  • Caches/services Windows Update (SoftwareDistribution/Catroot2/BITS) corrompus ou arrêtés.
  • Servicing Stack Update (SSU) manquante : la pile de maintenance n’est pas à niveau.
  • Composants système endommagés : corruption de magasin de composants (component store), fichiers système modifiés, échec CBS.
  • Filtres/Drivers tiers (antivirus, chiffrement, stockage, réseau) bloquant le processus de servicing.
  • Redémarrage en attente ou espace disque insuffisant sur la partition système.
  • État .NET incohérent (.NET 3.5 non activé mais mis à jour, .NET 4.8 partiellement présent, filesets en attente de compilation NGEN).

Pré‑requis et bonnes pratiques

  • Planifier une fenêtre de maintenance et disposer d’une sauvegarde/instantané.
  • Vérifier un espace libre > 5 Go sur C:\ et > 500 Mo sur la partition réservée système.
  • Si le serveur utilise WSUS, valider la disponibilité du package et la classification/approbation.
  • Désactiver temporairement les produits de sécurité trop intrusifs (ou activer un mode maintenance) le temps du patch.

Procédure détaillée de résolution

Réparer les fichiers système et le magasin de composants

  1. Exécuter SFC, puis DISM : cmd /c sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth DISM /Online /Cleanup-Image /StartComponentCleanup Astuce : /StartComponentCleanup réduit l’empreinte du magasin WinSxS. Évitez /ResetBase sur des serveurs critiques, car il supprime l’option de désinstallation des mises à jour.
  2. Redémarrer, puis retenter l’installation de KB5046540.

Corriger une partition réservée système saturée

Une SRP < 500 Mo est l’une des causes les plus fréquentes de 0x800f0922. Procédure :

  1. Ouvrir Gestion des disques (diskmgmt.msc) et repérer la partition réservée / EFI System Partition.
  2. Si elle est < 500 Mo, réduire la partition C: de 200–500 Mo, puis étendre la SRP.
  3. En ligne de commande (à exécuter uniquement si vous maîtrisez DiskPart) : diskpart list disk select disk 0 list partition select partition <ID_SRP> detail partition select partition <ID_OS> shrink desired=300 select partition <ID_SRP> extend size=300 exit

Mise en garde : toute opération de partitionnement peut rendre le système non amorçable si elle est mal effectuée. Sauvegardez et, en cas de doute, utilisez un outil graphique ou une procédure validée par votre DSI.

Réinitialiser complètement Windows Update

Réparer les services/caches résout de nombreux blocages.

net stop wuauserv
net stop cryptSvc
net stop bits
net stop msiserver
net stop trustedinstaller

ren %windir%\SoftwareDistribution SoftwareDistribution.old
ren %windir%\System32\catroot2 catroot2.old

net start trustedinstaller
net start msiserver
net start bits
net start cryptSvc
net start wuauserv 

Relancer ensuite la détection :

wuauclt /resetauthorization /detectnow
UsoClient StartScan

Vérifier la connectivité, le proxy et TLS 1.2

  • Proxy WinHTTP : netsh winhttp show proxy netsh winhttp reset proxy
  • Tests de sortie (exemples) : PowerShell -Command "Test-NetConnection download.windowsupdate.com -Port 443" PowerShell -Command "Invoke-WebRequest https://aka.ms -UseBasicParsing"
  • Activer TLS 1.2 (souvent déjà actif sous Server 2019, mais à vérifier si durcissement antérieur) : reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" ^ /v DefaultSecureProtocols /t REG_DWORD /d 0x00000A00 /f 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\Server" ^ /v Enabled /t REG_DWORD /d 1 /f

Confirmer l’état des services requis

Ces services doivent être au minimum en Manuel et démarrables :

  • Windows Modules Installer (TrustedInstaller)
  • App Readiness (AppReadiness)
  • Background Intelligent Transfer Service (BITS)
  • Windows Update (wuauserv)
sc config TrustedInstaller start= demand
sc config AppReadiness start= demand
sc config bits start= demand
sc config wuauserv start= demand
net start TrustedInstaller &amp; net start AppReadiness &amp; net start bits &amp; net start wuauserv

Installer la dernière Servicing Stack Update (SSU)

Avant un cumul .NET, assurez‑vous d’avoir la SSU récente. Si nécessaire, installez‑la en premier (en .msu) ; puis redémarrez et appliquez KB5046540.

wusa &lt;SSU-x64.msu&gt; /quiet /norestart

Forcer l’installation hors‑ligne du package

Utile si la détection WSUS/Windows Update est instable :

wusa Windows10.0-KB5046540-x64.msu /quiet /norestart

Alternative via DISM (package CAB) :

DISM /Online /Add-Package /PackagePath:"C:\Temp\KB5046540.cab"

Gérer un redémarrage en attente et nettoyer les états temporaires

PowerShell -Command "gpupdate /force"
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending
reg query HKLM\SYSTEM\CurrentControlSet\Control\Session Manager /v PendingFileRenameOperations

Si des clés « RebootPending » sont présentes, redémarrez le serveur avant toute nouvelle tentative.

Vérifier les pilotes et filtres pouvant bloquer CBS

  • Gestionnaire de périphériques : corriger tout périphérique en anomalie (triangle jaune).
  • Filtres noyau (chiffrement/antivirus/stockage) : vérifier les pilotes de filtre actifs : fltmc filters sc query type= driver state= all
  • Inventaire pilotes : pnputil /enum-drivers > C:\Temp\drivers.txt

Spécificités .NET Framework

  • .NET 3.5 (Feature à la demande) : si la feature est requise mais non installée, fournissez un source SxS valide. DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:D:\sources\sxs
  • .NET 4.x : confirmer la présence/état de 4.7.2/4.8. reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release
  • NGEN : terminer les compilations en file d’attente après update. %windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executequeueditems %windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe executequeueditems

Analyse et collecte de journaux

Une fois la tentative d’installation échouée, collecter et filtrer les logs :

  • WindowsUpdate.log (génération à partir des ETL) : PowerShell -Command "Get-WindowsUpdateLog -LogPath C:\Logs\WindowsUpdate.log"
  • CBS.log : findstr /c:"0x800f0922" %windir%\Logs\CBS\CBS.log findstr /c:"Package_for_RollupFix" %windir%\Logs\CBS\CBS.log
  • Événements : Observateur d’événements → Applications et services > Microsoft > Windows > WindowsUpdateClient et Servicing‑CBS.

Cas d’environnement WSUS

  • Vérifier que la classification nécessaire au cumul .NET est cochée et que le package KB5046540 est approuvé.
  • Forcer une détection locale : gpupdate /force wuauclt /resetauthorization /detectnow UsoClient StartScan
  • Si l’agent reste bloqué, basculer temporairement en Windows Update internet (stratégie), installer la MAJ, puis rétablir WSUS.

Tableau récapitulatif des causes et actions

Cause fréquenteAction recommandéeCommande/outil utile
Partition réservée système saturée (< 500 Mo)Étendre la partition ou supprimer les fichiers inutiles ; viser ≥ 500 Mo.diskmgmt.msc, diskpart
Connexion bloquée (proxy/VPN) ou TLS obsolèteTester la connectivité vers les domaines Microsoft ; activer TLS 1.2.Test-NetConnection, Invoke-WebRequest, netsh winhttp, reg add
Caches Windows Update corrompusArrêter WUA/BITS/CryptSvc/MSI → vider SoftwareDistribution et catroot2 → redémarrer.net stop/start, ren
Services désactivés (Windows Modules Installer, App Readiness)Remettre en Manuel ou Automatique et démarrer.sc config, services.msc
Servicing Stack Update manquanteInstaller d’abord la SSU récente pour Server 2019.wusa <SSU.msu>
Tentative hors‑ligneTélécharger le .msu et l’installer en silencieux, puis redémarrer.wusa Windows10.0-KB5046540-x64.msu /quiet /norestart
Composants CBS/Winsxs endommagésRéparer via SFC/DISM et nettoyage du magasin de composants.sfc /scannow, DISM /RestoreHealth
Pilotes/antivirus bloquantsMettre à jour/désactiver temporairement ; supprimer les filtres fautifs.fltmc, pnputil
Redémarrage en attenteRedémarrer avant toute nouvelle tentative d’installation.RebootPending dans le Registre

Vérifications après correction

  • Présence du correctif : wmic qfe | find "5046540" PowerShell -Command "Get-HotFix -Id KB5046540" DISM /Online /Get-Packages /Format:Table | findstr /i 5046540
  • État .NET : applications .NET relancées sans erreur ; file NGEN vidée.
  • Événements : absence d’erreurs WindowsUpdateClient/CBS post‑redémarrage.

Questions fréquentes

Que signifie l’erreur 0x800f0922 ?

Elle indique un échec de servicing en phase de finalisation. Les causes courantes sont l’insuffisance d’espace sur la partition réservée système, une connectivité empêchée vers Windows Update/WSUS, un magasin de composants endommagé, ou une SSU absente.

La suppression de catroot2 est‑elle sûre ?

Il ne faut pas supprimer catroot2, mais la renommer après avoir arrêté les services liés. Elle sera régénérée automatiquement au redémarrage des services.

Pourquoi l’installation hors‑ligne fonctionne‑t‑elle parfois ?

Elle contourne la détection/évaluation en ligne et réutilise le moteur de servicing local avec un package déjà acquis, ce qui élimine les erreurs de téléchargement/proxy et simplifie le chemin d’exécution.

Faut‑il activer .NET 3.5 pour installer KB5046540 ?

Non : si .NET 3.5 n’est pas installé, seules les parties ciblant 4.7.2/4.8 s’appliquent. En revanche, si votre parc requiert .NET 3.5, veillez à fournir la source SxS et à activer la feature avant d’installer les cumulatives .NET.

Checklist opératoire express

  1. Fenêtre de maintenance planifiée et sauvegarde OK.
  2. sfc /scannow puis DISM /RestoreHealth.
  3. Services WU en Manuel et démarrés ; caches réinitialisés.
  4. Proxy/TLS testés et valides ; redémarrage si Pending.
  5. SRP ≥ 500 Mo ; disque système > 5 Go libres.
  6. SSU installée ; puis installation de KB5046540 (en ligne ou .msu).
  7. Validation par Get-HotFix et contrôle des journaux.

Annexe : scripts pratiques

Réinitialiser Windows Update (PowerShell)

PowerShell -ExecutionPolicy Bypass -NoProfile -Command ^
"$services = 'wuauserv','bits','cryptsvc','msiserver','TrustedInstaller'; ^
 foreach ($s in $services){ sc.exe stop $s | Out-Null }; ^
 Rename-Item -Path $env:windir'\SoftwareDistribution' -NewName 'SoftwareDistribution.old' -ErrorAction SilentlyContinue; ^
 Rename-Item -Path $env:windir'\System32\catroot2' -NewName 'catroot2.old' -ErrorAction SilentlyContinue; ^
 foreach ($s in $services[-1..-5]){ sc.exe start $s | Out-Null }; ^
 Start-Process -FilePath 'cmd.exe' -ArgumentList '/c wuauclt /resetauthorization /detectnow &amp; UsoClient StartScan' -Verb runAs"

Détection d’un redémarrage en attente

PowerShell -NoProfile -Command ^
"$paths = @(
 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending',
 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired',
 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager'
); ^
$pending = $false; ^
foreach($p in $paths){ if(Test-Path $p){ $pending = $true; Write-Host 'Pending reboot flag at' $p } } ; ^
if($pending){ exit 1 } else { Write-Host 'No reboot pending.' }"

Mesure rapide de la taille de la SRP

PowerShell -NoProfile -Command ^
"Get-Partition | Where-Object { $_.Type -match 'System' -or $_.GptType -match 'E3C9E316' -or $_.GptType -match 'C12A7328' } | ^
 ForEach-Object { $v = Get-Volume -Partition $_ -ErrorAction SilentlyContinue; ^
  [PSCustomObject]@{ Disk=$_.DiskNumber; Partition=$_.PartitionNumber; SizeMB=[math]::Round($_.Size/1MB); Label=$v.FileSystemLabel } }"

Validation post‑patch

PowerShell -NoProfile -Command ^
"Get-HotFix -Id KB5046540 -ErrorAction SilentlyContinue; ^
&amp; $env:windir'\Microsoft.NET\Framework64\v4.0.30319\ngen.exe' executequeueditems; ^
&amp; $env:windir'\Microsoft.NET\Framework\v4.0.30319\ngen.exe' executequeueditems"

Conclusion

En suivant ce parcours — réparation SFC/DISM, réinitialisation des composants Windows Update, contrôle du proxy/TLS, mise à niveau de la SSU, vérification et extension de la partition réservée, puis, si nécessaire, installation hors‑ligne — vous couvrez l’essentiel des scénarios qui déclenchent 0x800f0922 lors de l’installation de KB5046540 sur Windows Server 2019, et maximisez vos chances d’appliquer le correctif avec succès.

Bon à savoir : si l’échec persiste, capturez WindowsUpdate.log et CBS.log après une tentative fraîche et comparez les horodatages ; ces journaux indiquent souvent s’il s’agit d’un souci connectivité/proxy, SRP ou corruption CBS, accélérant le diagnostic.

Sommaire