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.
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)
| Étape | Résultat |
|---|---|
| Collecte des CBS.log de plusieurs machines | En 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.exe | Confirmé : 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)
- Montez l’ISO (ex. lettre
D:). - 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 :
- Montez l’ISO correspondant au même build/édition/langue.
- Lancez
setup.exe. - Choisissez Conserver fichiers et applications.
- 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.exeet la manipulation des catalogues). - Vérifiez les proxys/SSL inspection : l’accès à
UpdateOrchestratoret à 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_CORRUPT0x800F0831avec mention d’un packagePackage_for_KBxxxxxxxFailed 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
| Action | Objectif |
|---|---|
| Exporter la configuration Windows Update | reg 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 Update | Purger 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 WinSxS | DISM /online /Cleanup-Image /AnalyzeComponentStore S’assurer qu’il reste > 8 Go libres avant installation. |
| Mettre à jour les pilotes de stockage et le BIOS | Limiter 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
| Code | Signification | Action prioritaire |
|---|---|---|
| 0x800F081F | Source de réparation introuvable | DISM /RestoreHealth avec ISO correspondant et /LimitAccess |
| 0x800F0831 | Dépendance à un KB antérieur manquante | Identifier le KB dans CBS.log et l’installer manuellement |
| 0x800F0989 | Incohérence de packages dans la pile | SSU récente + réparation DISM, puis LCU |
| 0x800F0991 | WinSxS incomplet/corrompu | DISM avec source fiable, ou in‑place upgrade |
Arbre de décision (résumé opérationnel)
- Relever le build exact (
winver.exe) et vérifier l’espace disque (> 8 Go libres). - DISM /RestoreHealth sans source. Si échec 0x800F081F → passer à la source ISO.
- Fournir la source ISO correspondante (
/Source:wim:...:index /LimitAccess). - Installer la SSU la plus récente du build, redémarrer.
- Nettoyer (
/StartComponentCleanup), puis SFC. - Relancer LCU (ex. KB5040442). Si échec : analyser CBS.log → installer le KB manquant.
- 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
- DISM /ScanHealth : aucun composant « réparable ».
- SFC : intégrité 100 % confirmée.
- SSU présent et à jour (
Get-WindowsPackage). - LCU installé et visible via
Get-HotFix/ Paramètres → Windows Update → Historique. - 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
/AnalyzeComponentStoreet alerter au‑delà d’un seuil d’incohérences. - Éviter les nettoyages agressifs de
WinSxSvia 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
- Fournir le
CBS.logrécent du poste Windows 11 23H2 affecté pour corrélation. - Exécuter
DISM /RestoreHealthavec source ISO idoine si la restauration automatique échoue. - Vérifier et installer manuellement la SSU la plus récente, puis rejouer le LCU (ex. KB5040442).
- En cas d’échec, lancer une réparation sur place (Setup /Repair) en conservant fichiers et applications.
- 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 ISO → SSU → nettoyage/SFC → LCU. 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.

