Windows 10/11 : corriger 0x800F081F, 0x800F0831, 0x800F0989 et 0x800F0991 (WinSxS, SSU, LCU)

Depuis trois mois, des postes Windows 10 22H2 et Windows 11 22H2/23H2 refusent l’installation des mises à jour cumulatives. Ce guide explique la cause (WinSxS corrompu) et livre un plan de remédiation éprouvé : réparation DISM avec source fiable, SSU, nettoyage, puis in‑place upgrade si nécessaire.

Sommaire

Problème rencontré

Plusieurs machines Windows 10 (build 19045) et Windows 11 (builds 22621 et 22631) échouent systématiquement à installer les correctifs mensuels (LCU). Les codes d’erreur observés sont :
0x800F0991, 0x800F081F, 0x800F0989, 0x800F0831 (resp. –2146498159, –2146498529, –2146498167, –2146498511).

Ces codes indiquent tous un problème du magasin de composants (WinSxS) : manifestes ou packages manquants, dépendances cassées vers un KB antérieur, ou incapacité à retrouver une source saine pour restaurer les fichiers. La conséquence concrète : l’installation du dernier LCU, par exemple KB5040442 sur Windows 11 23H2, échoue même après un nettoyage standard.

Diagnostic déjà effectué (cas réel)

ÉtapeRésultat
Collecte des CBS.log de plusieurs machinesEn attente d’analyse complète (fichiers partagés). Première revue : erreurs ERROR_SXS_COMPONENT_STORE_CORRUPT et références à des KB manquants.
Vérification des versions / builds via winver.exeConfirmé : 10.0.19045 (W10 22H2), 10.0.22621 (W11 22H2), 10.0.22631 (W11 23H2).
Exécution DISM /online /Cleanup-Image /StartComponentCleanup sur une W11 23H2 (KULNBPF4QQ51Y)Succès de l’opération, mais l’installation du LCU KB5040442 échoue toujours.

Conclusion intermédiaire : un ou plusieurs packages requis par le LCU sont absents du magasin ; DISM n’a pas identifié de source valide pour restaurer les composants.

Pourquoi ces codes renvoient vers WinSxS

Le moteur de maintenance (CBS – Component Based Servicing) s’appuie sur C:\Windows\WinSxS pour stocker manifestes, catalogues et payloads des fonctionnalités et mises à jour. Lorsque des dépendances d’un LCU pointent vers un package supprimé, remplacé ou introuvable, CBS renvoie typiquement :

  • 0x800F081F : source introuvable (corruption ou source non accessible).
  • 0x800F0831 : dépendance à un KB antérieur manquante.
  • 0x800F0989 / 0x800F0991 : anomalies de piles de maintenance/paquets cumulés.

Dans ces situations, un simple /StartComponentCleanup ne suffit pas : il sait supprimer les versions remplacées, pas recréer un package disparu. Il faut réparer le magasin à l’aide d’une source fiable (ISO du même build/édition/langue) ou d’un WinSxS provenant d’un poste sain strictement identique.

Solutions proposées et mesures correctives

Réparer le magasin de composants (WinSxS)

Commencez par tenter une réparation en ligne :

DISM /online /Cleanup-Image /RestoreHealth

Si l’erreur 0x800F081F persiste, fournissez explicitement une source correspondant exactement au build/édition/langue installés.

Option A : ISO officiel (même build/édition/langue)

  1. Montez l’ISO (ex. lettre D:).
  2. Identifiez l’index correspondant à votre édition :
DISM /Get-WimInfo /WimFile:D:\sources\install.wim
:: Si ISO contient un install.esd :
DISM /Get-WimInfo /WimFile:D:\sources\install.esd

Puis lancez la réparation (remplacez :1 par l’index correct) :

DISM /online /Cleanup-Image /RestoreHealth /Source:wim:D:\sources\install.wim:1 /LimitAccess
:: Variante ESD :
DISM /online /Cleanup-Image /RestoreHealth /Source:esd:D:\sources\install.esd:1 /LimitAccess

Option B : WinSxS d’un poste sain identique

Depuis un poste sain (même build/édition/langues installées), copiez C:\Windows\WinSxS vers un partage en lecture seule (ou montez un VHDX en RO). Spécifiez ce dossier comme source :

DISM /online /Cleanup-Image /RestoreHealth /Source:\\Serveur\RO\WinSxS /LimitAccess

Astuce : pour éviter tout mélange de sources, conservez /LimitAccess afin que DISM n’interroge pas Windows Update/WSUS pendant la réparation.

Vérifier la réparation

DISM /online /Cleanup-Image /CheckHealth
DISM /online /Cleanup-Image /ScanHealth

Si /ScanHealth ne trouve plus d’incohérences, poursuivez avec l’installation de la pile de maintenance et du LCU.

Installer la pile de maintenance (SSU) la plus récente

Les SSU sont cumulatives ; vous pouvez installer la plus récente correspondant au build (19045, 22621, 22631). Vérifiez d’abord l’état actuel :

powershell -ExecutionPolicy Bypass -NoProfile -Command ^
  "Get-WindowsPackage -Online |
   Where-Object { $_.PackageName -like '*Servicing*Stack*' } |
   Sort-Object -Property InstallTime -Descending |
   Select-Object -First 1 PackageName, Version, InstallTime | Format-List"

Si aucune SSU récente n’apparaît ou si vous suspectez une corruption, installez manuellement la SSU adaptée au build puis redémarrez.

Nettoyer les fichiers orphelins et valider l’intégrité

DISM /online /Cleanup-Image /StartComponentCleanup
DISM /online /Cleanup-Image /StartComponentCleanup /ResetBase
sfc /scannow

Attention : /ResetBase rend impossible la désinstallation de mises à jour existantes (il « fige » l’état). À employer après avoir confirmé la compatibilité applicative.

Réparer via in‑place upgrade (réinstallation par‑dessus)

Lorsque DISM/SFC ne suffisent pas, la réparation par‑dessus (in‑place upgrade) est la méthode la plus sûre :

  1. Montez l’ISO correspondant au même build/édition/langue.
  2. Lancez setup.exe.
  3. Choisissez Conserver fichiers et applications.
  4. Laissez l’assistant reconstruire le magasin de composants et la pile CBS.

Cette opération est généralement rapide et ne touche pas aux données utilisateur ni aux applications (prévoir néanmoins une fenêtre de maintenance).

Vérifier les politiques de groupe et solutions tierces

  • Confirmez qu’aucun ciblage WSUS/Intune ne filtre le nouveau LCU (déploiement mis en pause, anneaux bloquants, deadline, etc.).
  • Désactivez temporairement les agents antivirus/EDR pour le test (certains interceptent TiWorker.exe et la manipulation des catalogues).
  • Vérifiez les proxys/SSL inspection : l’accès à UpdateOrchestrator et à l’infrastructure de mise à jour doit être exempt d’altérations.

Analyser les journaux CBS/DISM pour identifier un KB manquant

Recherchez dans C:\Windows\Logs\CBS\CBS.log et C:\Windows\Logs\DISM\dism.log les motifs suivants :

  • ERROR_SXS_COMPONENT_STORE_CORRUPT
  • 0x800F0831 avec mention d’un package Package_for_KBxxxxxxx
  • Failed to resolve package / Cannot download file / Missing package

Si un KB précis est cité (par ex. Package_for_KB5030310), téléchargez ce KB et installez-le hors‑ligne, redémarrez, puis relancez le LCU courant.

Étapes complémentaires utiles

ActionObjectif
Exporter la configuration Windows Updatereg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /s reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /s Détecter un point WSUS erroné ou des politiques contradictoires.
Réinitialiser les composants Windows UpdatePurger SoftwareDistribution & Catroot2 : net stop wuauserv net stop bits net stop cryptSvc net stop msiserver ren %systemroot%\SoftwareDistribution SoftwareDistribution.old ren %systemroot%\System32\catroot2 catroot2.old net start msiserver net start cryptSvc net start bits net start wuauserv
Surveiller l’espace disque et les quotas WinSxSDISM /online /Cleanup-Image /AnalyzeComponentStore S’assurer qu’il reste > 8 Go libres avant installation.
Mettre à jour les pilotes de stockage et le BIOSLimiter les erreurs de maintenance liées à d’anciens drivers (Intel RST / AMD RAID).
Créer un plan de remédiation automatisé (Intune/ConfigMgr)Exécuter DISM/SFC et pousser les SSU + LCU corrects en tâche planifiée, avec redémarrage contrôlé.

Tableau de correspondance : codes → causes probables

CodeSignificationAction prioritaire
0x800F081FSource de réparation introuvableDISM /RestoreHealth avec ISO correspondant et /LimitAccess
0x800F0831Dépendance à un KB antérieur manquanteIdentifier le KB dans CBS.log et l’installer manuellement
0x800F0989Incohérence de packages dans la pileSSU récente + réparation DISM, puis LCU
0x800F0991WinSxS incomplet/corrompuDISM avec source fiable, ou in‑place upgrade

Arbre de décision (résumé opérationnel)

  1. Relever le build exact (winver.exe) et vérifier l’espace disque (> 8 Go libres).
  2. DISM /RestoreHealth sans source. Si échec 0x800F081F → passer à la source ISO.
  3. Fournir la source ISO correspondante (/Source:wim:...:index /LimitAccess).
  4. Installer la SSU la plus récente du build, redémarrer.
  5. Nettoyer (/StartComponentCleanup), puis SFC.
  6. Relancer LCU (ex. KB5040442). Si échec : analyser CBS.log → installer le KB manquant.
  7. En dernier recours, effectuer une réparation par‑dessus (in‑place upgrade).

Playbook d’automatisation (Intune / ConfigMgr)

Détection : magasin corrompu ou SSU manquante

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "$ErrorActionPreference='Stop';
   $scan = (dism /online /Cleanup-Image /ScanHealth | Out-String);
   $ssu  = Get-WindowsPackage -Online | Where-Object { $_.PackageName -like '*Servicing*Stack*' } |
           Sort-Object InstallTime -Descending | Select-Object -First 1;
   if ($scan -match 'component store is repairable' -or -not $ssu) { exit 1 } else { exit 0 }"

Remédiation : DISM avec source + SSU + LCU

Pré-requis : déposer l’ISO adéquat sur un partage local/DP et le monter (script). Exemple :

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "$iso = 'C:\Sources\Win11_23H2.iso';
   $mnt = Mount-DiskImage -ImagePath $iso -PassThru | Get-Volume;
   $drv = $mnt.DriveLetter + ':\';
   dism /online /Cleanup-Image /RestoreHealth /Source:wim:${drv}sources\install.wim:1 /LimitAccess;
   # Installer SSU si fournie dans le package :
   $ssuCab = Get-ChildItem 'C:\Sources\SSU\' -Filter *.cab -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -First 1;
   if ($ssuCab) { dism /online /Add-Package /PackagePath:$($ssuCab.FullName) }
   # Pousser le LCU :
   $lcu = Get-ChildItem 'C:\Sources\LCU\' -Filter *.msu -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -First 1;
   if ($lcu) { wusa $($lcu.FullName) /quiet /norestart }
   Dismount-DiskImage -ImagePath $iso"

Lecture rapide des journaux

Filtrer CBS.log pour les erreurs fréquentes

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "Select-String -Path C:\Windows\Logs\CBS\CBS.log -Pattern '0x800F0(831|81F|989|991)|ERROR_SXS_COMPONENT_STORE_CORRUPT' |
   Select-Object LineNumber, Line | Format-List"

Repérer un KB manquant

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "$hits = Select-String -Path C:\Windows\Logs\CBS\CBS.log -Pattern 'Package_for_KB\d{7}';
   $hits | ForEach-Object { $_.Matches.Value } | Sort-Object -Unique"

Bonnes pratiques avant/après remédiation

  • Créer un point de restauration système (si activé) et une sauvegarde des données critiques.
  • Vérifier la cohérence du fuseau horaire/NTP : une dérive horaire importante perturbe la validation de catalogues.
  • Désactiver temporairement la déduplication et les nettoyages tiers (outils de « tuning »), susceptibles de supprimer des payloads.
  • Après correction, forcer une détection côté client : usoclient StartScan usoclient StartDownload usoclient StartInstall
  • Contrôler le journal Servicing (Observateur d’événements → Microsoft‑Windows‑Servicing/Operational) pour valider la séquence.

Commande tout‑en‑un (poste isolé)

Le bloc ci‑dessous enchaîne réparation DISM avec ISO monté, SFC, puis installation SSU/LCU si présents localement. À exécuter en invite admin :

@echo off
setlocal EnableExtensions
set ISO=C:\Sources\Win.iso
for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where "VolumeName is not null" get DeviceID^, VolumeName /value ^| find /i "CCCOMA"') do set DRIVE=%%i
if not defined DRIVE (
  powershell -NoProfile -Command "Mount-DiskImage -ImagePath '%ISO%'; Start-Sleep -s 3"
  for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where "VolumeName is not null" get DeviceID^, VolumeName /value ^| find /i "CCCOMA"') do set DRIVE=%%i
)
echo [1/4] DISM /RestoreHealth avec source...
dism /online /Cleanup-Image /RestoreHealth /Source:wim:%DRIVE%\sources\install.wim:1 /LimitAccess
echo [2/4] Nettoyage & SFC...
dism /online /Cleanup-Image /StartComponentCleanup
sfc /scannow
echo [3/4] Installation SSU si dispo...
for %%f in (C:\Sources\SSU\*.cab) do dism /online /Add-Package /PackagePath:"%%f"
echo [4/4] Installation LCU si dispo...
for %%f in (C:\Sources\LCU\*.msu) do wusa "%%f" /quiet /norestart
echo Terminé. Pensez à redémarrer.
endlocal

Gestion des cas limites

  • Langue/édition divergentes : une source ISO ne correspondant pas à l’OS installé échouera (mismatch de manifests). Validez édition (Pro/Enterprise), langue par défaut et packs de langue additionnels.
  • Chiffrement disque (BitLocker) : suspendre temporairement la protection pendant la réparation in‑place.
  • WUSA rollback : si un LCU partiellement installé bloque la pile, désinstaller la dernière tentative avant de réappliquer : wusa /uninstall /kb:<NUMERO_KB> /quiet /norestart
  • Serveurs RDS/VDI : vérifier les disques de différenciation et la persistance des dossiers WinSxS/SoftwareDistribution.

Check‑list de validation post‑réparation

  1. DISM /ScanHealth : aucun composant « réparable ».
  2. SFC : intégrité 100 % confirmée.
  3. SSU présent et à jour (Get-WindowsPackage).
  4. LCU installé et visible via Get-HotFix / Paramètres → Windows Update → Historique.
  5. Observateur d’événements : absence d’erreurs Servicing critiques durant la fenêtre.

Prévention : garder un environnement sain

  • Standardiser un ISO de référence par build (19045/22621/22631) et le conserver en dépôt interne.
  • Mettre en place une remédiation proactive Intune/ConfigMgr : exécuter périodiquement /AnalyzeComponentStore et alerter au‑delà d’un seuil d’incohérences.
  • Éviter les nettoyages agressifs de WinSxS via des outils tiers non approuvés.
  • Documenter un runbook interne pour les équipes de proximité (montage ISO, commandes DISM, lecture basique de CBS.log).

Résumé des prochaines actions concrètes

  1. Fournir le CBS.log récent du poste Windows 11 23H2 affecté pour corrélation.
  2. Exécuter DISM /RestoreHealth avec source ISO idoine si la restauration automatique échoue.
  3. Vérifier et installer manuellement la SSU la plus récente, puis rejouer le LCU (ex. KB5040442).
  4. En cas d’échec, lancer une réparation sur place (Setup /Repair) en conservant fichiers et applications.
  5. Après correction, synchroniser WSUS/Intune et déployer à l’ensemble du parc selon les anneaux définis.

FAQ rapide

Q : StartComponentCleanup a abouti mais le LCU échoue. Pourquoi ?
R : Cette commande supprime les versions remplacées. Si un package requis est absent, seul /RestoreHealth avec une source valide peut le réinjecter.

Q : Faut‑il systématiquement faire un in‑place upgrade ?
R : Non. Réservez‑le aux cas où DISM+SSU+SFC ne suffisent pas, ou lorsque CBS.log révèle des corruptions multiples et incohérentes.

Q : Puis‑je utiliser n’importe quel ISO Windows 11 ?
R : Non. Le build, l’édition (Pro/Enterprise/Education) et la langue doivent correspondre. Sinon, la réparation échouera (mismatch de catalogues).

Q : Comment prouver que la pile est saine après intervention ?
R : Capturez les sorties de DISM /ScanHealth, sfc /scannow, Get-WindowsPackage (SSU) et l’Historique Windows Update, joignez‑les au ticket de clôture.

Annexes : commandes utiles

  • Liste des KB installés : powershell -NoProfile -Command "Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 20"
  • Forcer la détection Windows Update : usoclient StartScan && usoclient StartDownload && usoclient StartInstall
  • État du magasin : DISM /online /Cleanup-Image /CheckHealth DISM /online /Cleanup-Image /ScanHealth DISM /online /Cleanup-Image /AnalyzeComponentStore
  • Lecture du journal DISM : notepad C:\Windows\Logs\DISM\dism.log
  • Lecture du journal CBS : notepad C:\Windows\Logs\CBS\CBS.log

En synthèse : les erreurs 0x800F0991 / 0x800F081F / 0x800F0989 / 0x800F0831 traduisent un magasin WinSxS corrompu ou incomplet. Appliquez méthodiquement : DISM avec source ISOSSUnettoyage/SFCLCU. En cas d’échec, une réparation sur place remet l’OS d’équerre sans perte de données, puis un déploiement contrôlé via WSUS/Intune rétablit la cadence normale de mises à jour.

Sommaire