KB5034122 peut échouer sur Windows 10 avec l’erreur 0x800700b7 après une interruption. Ce guide montre comment diagnostiquer deux catalogues .cat corrompus dans catroot et les remplacer pour rétablir Windows Update rapidement et en toute sécurité.
Symptômes et contexte
Après une coupure inopinée pendant Windows Update, la mise à jour cumulative KB5034122 refuse de s’installer et remonte le code 0x800700b7 (Already Exists). D’autres mises à jour, comme KB5034441 et KB5024275, peuvent au contraire s’installer sans difficulté, ce qui oriente vers un problème localisé. Les vérifications classiques — SFC, DISM, restauration système, réinitialisation des dossiers SoftwareDistribution et catroot2 — ne changent rien. La cause est alors souvent une corruption de catalogues de sécurité (.cat) empêchant l’enregistrement de certains composants dans la base Cryptographic Services.
Ce que disent les journaux
Dans %windir%\Logs\CBS\CBS.log, on observe des échecs liés à l’inscription des catalogues avec des messages de type « Invalid Public Key Security Object File » et des tentatives répétées d’ajout dans la base de catalogues (cryptcat). Le motif est typiquement la corruption de deux fichiers .cat situés dans :
C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
Exemples de fichiers incriminés :
Microsoft-Windows-Printer-Drivers-Package…3636.catMicrosoft-Windows-Portable-Devices-merged-Package…3636.cat
Ces fichiers, lorsqu’on tente de les ouvrir, déclenchent l’erreur de clé publique invalide, ce qui bloque l’enregistrement du catalogue et produit l’erreur 0x800700b7.
Résumé rapide de la cause
- Le code 0x800700b7 signifie l’élément existe déjà. Dans le contexte Windows Update, c’est souvent un signe d’entrées de catalogues déjà présentes ou endommagées dans la base, ou de doublons incohérents.
- La corruption de
.catempêche leur inscription ou leur réinscription, et certaines étapes de KB5034122 en dépendent directement (d’où l’échec unique de cette KB alors que d’autres passent).
Diagnostic étape par étape
Avant d’intervenir, confirmez le diagnostic à l’aide des commandes suivantes (Ouvrir Invite de commandes en administrateur) :
:: Rechercher les occurrences parlantes dans CBS.log
findstr /i /c:"0x800700b7" /c:"catalog" /c:"catroot" "%windir%\Logs\CBS\CBS.log"
:: Lister les catalogues ciblés par le journal
dir /a /o:n "C:\Windows\System32\catroot{F750E6C3-38EE-11D1-85E5-00C04FC295EE}*Printer-Drivers*3636*.cat"
dir /a /o:n "C:\Windows\System32\catroot{F750E6C3-38EE-11D1-85E5-00C04FC295EE}*Portable-Devices*3636*.cat"
:: Tester l’intégrité d’un .cat (ne modifie rien)
certutil -hashfile "C:\Chemin\vers\fichier.cat" SHA256 </code></pre>
<p>Si l’ouverture du <code>.cat</code> échoue dans l’Explorateur ou si le calcul de hachage fonctionne mais le fichier reste rejeté par Windows Update, supposez une corruption logique ou un enregistrement incohérent. La correction consiste alors à <strong>remplacer</strong> les catalogues défectueux par des copies saines, puis à <strong>réinitialiser</strong> les dépôts d’Update.</p>
<h2>Comprendre catroot, catroot2 et SoftwareDistribution</h2>
<p>Avant d’agir, il est utile de connaître le rôle de chaque dossier.</p>
<table>
<thead>
<tr>
<th>Composant</th>
<th>Rôle principal</th>
<th>Persistance</th>
<th>Quand intervenir</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>catroot</code> (catroot1)</td>
<td>Stocke les <strong>catalogues de certificats (.cat)</strong> signés utilisés par le système et Windows Update.</td>
<td><strong>Persistant</strong> : base critique de Cryptographic Services.</td>
<td>Uniquement pour remplacer des <code>.cat</code> <em>corrompus</em> par des copies saines. Éviter l’effacement massif.</td>
</tr>
<tr>
<td><code>catroot2</code></td>
<td>Base dérivable utilisée par Windows Update pour préparer et mettre en cache des métadonnées.</td>
<td><strong>Régénérable</strong> : se recrée si on la renomme/supprime.</td>
<td>À renommer lors d’un reset Windows Update pour repartir proprement.</td>
</tr>
<tr>
<td><code>SoftwareDistribution</code></td>
<td>Cache des téléchargements et historique d’Update.</td>
<td><strong>Régénérable</strong> : recréé automatiquement.</td>
<td>À renommer pour purger cache et files d’attente.</td>
</tr>
</tbody>
</table>
<h2>Procédure de réparation éprouvée</h2>
<h3>Pré-requis (sécurité et réussite)</h3>
<ul>
<li>Ouvrir une <strong>session Administrateur</strong>.</li>
<li>Prévoir un <strong>point de restauration</strong> système.</li>
<li>Identifier des <strong>copies saines</strong> des deux catalogues <code>.cat</code> incriminés : idéalement depuis un PC Windows 10 <em>de même build et langue</em>, ou depuis une image ISO officielle (voir plus bas).</li>
<li>Calculer et noter le <strong>SHA‑256</strong> de chaque copie source (traçabilité).</li>
</ul>
<h3>Remplacement des catalogues corrompus et reset Windows Update</h3>
<ol>
<li><strong>Arrêter les services liés</strong> :
<pre><code>net stop wuauserv
net stop cryptsvc
<p>(Optionnel, si des verrous persistent : net stop bits et net stop msiserver.)</p>
Copier/Remplacer les .cat corrompus dans catroot. La suppression directe peut échouer ; en revanche, le copier‑remplacer fonctionne généralement quand cryptsvc est arrêté :
copy /y "D:\CataloguesSains\Microsoft-Windows-Printer-Drivers-Package…3636.cat" ^
"C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\"
copy /y "D:\CataloguesSains\Microsoft-Windows-Portable-Devices-merged-Package…3636.cat" ^
"C:\Windows\System32\catroot{F750E6C3-38EE-11D1-85E5-00C04FC295EE}"
Astuce : si l’accès est refusé, vérifiez bien que cryptsvc est stoppé. Évitez les prises de possession agressives sur catroot ; elles sont rarement nécessaires ici.
Réinitialiser les dépôts d’Update :
ren %systemroot%\System32\catroot2 catroot2.old
ren %systemroot%\SoftwareDistribution SoftwareDistribution.old
Redémarrer les services :
net start cryptsvc
net start wuauserv
Relancer Windows Update et installer KB5034122. L’installation doit cette fois aboutir sans code d’erreur.
Vérifications post‑opération
- Contrôler que l’historique d’Update affiche « Installé » pour KB5034122.
- Repasser SFC et DISM par acquis de conscience :
sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth - Optionnel : regénérer
WindowsUpdate.logpour un audit :PowerShell -NoProfile -Command "Get-WindowsUpdateLog"
Extraction des .cat depuis une image ISO officielle (sans machine saine)
Si vous n’avez pas de PC équivalent à disposition, on peut obtenir des .cat intacts depuis un ISO Windows 10 correspondant à votre édition (langue/architecture). L’idée est de monter l’image, d’explorer install.wim/install.esd, puis de récupérer les deux catalogues.
- Monter l’ISO (clic droit → Monter). Supposons que le lecteur monté soit
E:. - Identifier l’index de l’édition désirée :
dism /Get-WimInfo /WimFile:E:\sources\install.wim :: (si c’est .esd, utilisez E:\sources\install.esd) - Monter l’image dans un dossier de travail :
md C:\Mount dism /Mount-Image /ImageFile:E:\sources\install.wim /Index:6 /MountDir:C:\Mount(Remplacez/Index:6par l’index qui correspond à votre édition.) - Localiser les catalogues dans l’image montée :
dir /b /s "C:\Mount\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\*Printer-Drivers*3636*.cat" dir /b /s "C:\Mount\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\*Portable-Devices*3636*.cat" - Copier les deux fichiers vers un emplacement temporaire, puis calculer le SHA‑256 pour conserver une trace :
copy "C:\Mount\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\*.cat" "D:\CataloguesSains\" certutil -hashfile "D:\CataloguesSains\xxx.cat" SHA256 - Démonter l’image :
dism /Unmount-Image /MountDir:C:\Mount /Discard rd /s /q C:\Mount
Vous pourrez alors appliquer la procédure de remplacement décrite plus haut (Arrêt services → Copier/Remplacer → Reset catroot2/SoftwareDistribution → Redémarrer services → Installer KB).
Bonnes pratiques et pièges à éviter
- Éviter la suppression brutale des fichiers
.catdanscatroot: préférez un copier‑remplacer après arrêt decryptsvc. Cela limite les incohérences de la base de catalogues. - Correspondance d’édition : pour des
.catfiables, utilisez une source dont la build et la langue correspondent. Des divergences peuvent réintroduire d’autres erreurs de validation. - Intégrité : calculez systématiquement le SHA‑256 (
certutil -hashfile) et conservez la valeur avec vos sauvegardes. - Stabilité : pendant l’installation de KB5034122, évitez la mise en veille et les redémarrages forcés.
Pourquoi l’erreur 0x800700b7 survient ici
0x800700b7 (ERROR_ALREADY_EXISTS) apparaît lorsque le système tente d’inscrire un catalogue ou une entrée déjà référencée mais incohérente. Lors d’une coupure, la base de catalogues peut conserver des demi‑états : un objet est déclaré présent mais invalide. Au redémarrage, lorsque KB5034122 réessaie d’enregistrer ses composants, la base renvoie Already Exists et bloque l’opération. En remplaçant les .cat physiques défectueux, on rend l’objet valide et l’enregistrement se déroule normalement.
Check‑list de validation
| Contrôle | Commande / Action | Résultat attendu |
|---|---|---|
| Intégrité des .cat remplacés | certutil -hashfile "…\fichier.cat" SHA256 | Valeur SHA‑256 correspond à votre source de confiance. |
| Services relancés | sc query wuauserv & sc query cryptsvc | STATE = RUNNING. |
| Dépôts régénérés | Ouverture des dossiers recréés | catroot2 et SoftwareDistribution existent à nouveau et sont peu volumineux. |
| Installation KB5034122 | Paramètres > Mise à jour & sécurité > Windows Update | KB5034122 = Installée. |
Automatiser la réparation (PowerShell)
Le script suivant sauvegarde les .cat d’origine, remplace par des copies saines, réinitialise catroot2 et SoftwareDistribution, puis relance Windows Update. Personnalisez les chemins des deux fichiers .cat sains.
# Exécuter en tant qu'Administrateur
param(
[Parameter(Mandatory=$true)]
[string]$PrinterDriversCat, # Chemin vers Microsoft-Windows-Printer-Drivers-Package…3636.cat sain
[Parameter(Mandatory=$true)]
[string]$PortableDevicesCat # Chemin vers Microsoft-Windows-Portable-Devices-merged-Package…3636.cat sain
)
$ErrorActionPreference = 'Stop'
$CatrootGuid = '{F750E6C3-38EE-11D1-85E5-00C04FC295EE}'
$CatrootPath = Join-Path $env:windir "System32\catroot$CatrootGuid"
$BackupDir = Join-Path $env:SystemDrive "Catroot_Backup_$(Get-Date -Format yyyyMMdd_HHmmss)"
$Log = Join-Path $BackupDir "repair.log"
New-Item -ItemType Directory -Path $BackupDir -Force | Out-Null
"[$(Get-Date)] Démarrage de la réparation KB5034122 0x800700b7" | Tee-Object -FilePath $Log -Append
function Hash($Path) {
$hasher = [System.Security.Cryptography.SHA256]::Create()
$stream = [System.IO.File]::OpenRead($Path)
try {
($hasher.ComputeHash($stream) | ForEach-Object { $_.ToString('x2') }) -join ''
} finally {
$stream.Dispose()
}
}
# Arrêter services critiques
'cryptsvc','wuauserv' | ForEach-Object {
Write-Host "Arrêt du service $_ ..."
Start-Process sc.exe "stop $_" -WindowStyle Hidden -Wait
}
# Sauvegarde des .cat existants s'ils sont présents
$Targets = @(
(Join-Path $CatrootPath (Split-Path $PrinterDriversCat -Leaf)),
(Join-Path $CatrootPath (Split-Path $PortableDevicesCat -Leaf))
)
foreach ($t in $Targets) {
if (Test-Path $t) {
$dest = Join-Path $BackupDir (Split-Path $t -Leaf)
Copy-Item $t $dest -Force
"[$(Get-Date)] Sauvegarde: $t -> $dest (SHA256=$(Hash $dest))" | Tee-Object -FilePath $Log -Append
} else {
"[$(Get-Date)] Absent (pas de sauvegarde): $t" | Tee-Object -FilePath $Log -Append
}
}
# Remplacement par des copies saines
$Map = @{
$PrinterDriversCat = (Join-Path $CatrootPath (Split-Path $PrinterDriversCat -Leaf))
$PortableDevicesCat = (Join-Path $CatrootPath (Split-Path $PortableDevicesCat -Leaf))
}
foreach ($src in $Map.Keys) {
$dst = $Map[$src]
Copy-Item $src $dst -Force
"[$(Get-Date)] Copie: $src -> $dst (SHA256=$(Hash $src))" | Tee-Object -FilePath $Log -Append
}
# Réinitialisation des dépôts dérivables
$Catroot2 = Join-Path $env:windir 'System32\catroot2'
$SDist = Join-Path $env:windir 'SoftwareDistribution'
if (Test-Path $Catroot2) { Rename-Item $Catroot2 ($Catroot2 + '.old') -Force }
if (Test-Path $SDist) { Rename-Item $SDist ($SDist + '.old') -Force }
# Redémarrage des services
'cryptsvc','wuauserv' | ForEach-Object {
Write-Host "Démarrage du service $_ ..."
Start-Process sc.exe "start $_" -WindowStyle Hidden -Wait
}
"[$(Get-Date)] Terminé. Relancez l’installation de KB5034122." | Tee-Object -FilePath $Log -Append
Write-Host "Journal: $Log" </code></pre>
<h2>FAQ rapide</h2>
<details>
<summary>Faut‑il supprimer les .cat corrompus ?</summary>
<div><p>Non. La suppression peut échouer et abîmer davantage la base. <strong>Copier/Remplacer</strong> après arrêt de <code>cryptsvc</code> est la méthode la plus sûre.</p></div>
</details>
<details>
<summary>Pourquoi KB5034122 échoue alors que KB5034441 et KB5024275 réussissent ?</summary>
<div><p>Ces autres KB ne réinscrivent pas les mêmes catalogues. KB5034122 dépend précisément des <code>.cat</code> endommagés (<em>Printer‑Drivers‑Package</em> et <em>Portable‑Devices‑merged‑Package</em>), d’où un échec sélectif.</p></div>
</details>
<details>
<summary>Une réinitialisation de <code>catroot2</code> et <code>SoftwareDistribution</code> seule suffit‑elle ?</summary>
<div><p>Pas si la racine du problème réside dans <code>catroot</code> (catalogues persistants). Ces dossiers « 2 » et <em>SoftwareDistribution</em> sont régénérables, mais ils ne réparent pas des <code>.cat</code> invalides.</p></div>
</details>
<details>
<summary>Comment vérifier l’intégrité d’un .cat ?</summary>
<div><p>Calculez son <strong>SHA‑256</strong> :</p>
<pre><code>certutil -hashfile <chemin>\<fichier>.cat SHA256
<p>Comparez la valeur avec celle d’une source fiable. Vous pouvez aussi utiliser signtool verify si vous disposez des outils SDK.</p>
Et si l’erreur persiste après remplacement ?
Vérifiez la correspondance d’édition (build/langue), redémarrez, répétez le reset d’Update. En dernier recours, une réparation in‑place upgrade (conservation des données) peut reconstruire la pile de maintenance.
Exemple complet de séquence de commandes (récapitulatif)
À exécuter dans un cmd administrateur, en adaptant les chemins vers vos copies saines :
:: 1) Arrêt des services
net stop wuauserv
net stop cryptsvc
:: 2) Remplacement des catalogues corrompus
copy /y "D:\CataloguesSains\Microsoft-Windows-Printer-Drivers-Package…3636.cat" ^
"C:\Windows\System32\catroot{F750E6C3-38EE-11D1-85E5-00C04FC295EE}"
copy /y "D:\CataloguesSains\Microsoft-Windows-Portable-Devices-merged-Package…3636.cat" ^
"C:\Windows\System32\catroot{F750E6C3-38EE-11D1-85E5-00C04FC295EE}"
:: 3) Reset des dépôts dérivables
ren %systemroot%\System32\catroot2 catroot2.old
ren %systemroot%\SoftwareDistribution SoftwareDistribution.old
:: 4) Redémarrage des services
net start cryptsvc
net start wuauserv
:: 5) Lancer la recherche de mises à jour via l’interface
Bonnes pratiques de traçabilité
- Conservez dans un dossier sécurisé : les copies saines, leurs SHA‑256, la date de l’opération, et un bref journal (le script PowerShell ci‑dessus produit
repair.log). - Notez le nom exact des catalogues remplacés (y compris la « révision » comme
…3636), utile si une future KB remet en cause ces packages.
Encadré : glossaire express
- Catalogue (.cat) : fichier signé listant des hachages de composants. Windows s’y fie pour valider l’intégrité et l’authenticité.
- Cryptographic Services (cryptsvc) : service Windows gérant entre autres la base de catalogues.
- CBS.log : journal détaillé de la pile de maintenance (Component Based Servicing).
- 0x800700b7 : code d’erreur « Already Exists » ; dans ce contexte, typiquement un enregistrement de catalogue en conflit.
Méthode alternative hors connexion
Si la machine ne peut pas accéder à Windows Update, vous pouvez injecter KB5034122 manuellement après réparation des catalogues :
- Téléchargez le package CAB ou MSU correspondant (source officielle).
- Réparez les
.catcomme décrit. - Installez le package via
DISM /Online /Add-Package /PackagePath:<chemin>ou double‑clic sur le MSU.
Cette voie évite la phase de détection, mais n’élude pas la nécessité de corriger les catalogues : sinon l’ajout échouera de la même façon.
Cas réel : ce qui a résolu durablement l’échec de KB5034122
Dans le scénario analysé, deux catalogues spécifiques étaient corrompus : Microsoft‑Windows‑Printer‑Drivers‑Package…3636.cat et Microsoft‑Windows‑Portable‑Devices‑merged‑Package…3636.cat. Leur remplacement par des copies saines (vérifiées par SHA‑256), suivi d’une réinitialisation stricte de catroot2 et SoftwareDistribution, a permis l’installation immédiate de KB5034122. Depuis, Windows Update fonctionne normalement.
Résumé opérationnel
- Symptôme : KB5034122 échoue avec 0x800700b7 malgré SFC/DISM et reset standard.
- Diagnostic : deux
.catcorrompus danscatroot(Printer‑Drivers, Portable‑Devices‑merged), « Invalid Public Key Security Object File » dansCBS.log. - Solution : remplacer les
.catpar des copies saines → renommercatroot2etSoftwareDistribution→ relancercryptsvc/wuauserv→ réessayer l’installation. - Vérif :
certutil -hashfile … SHA256, KB5034122 marquée Installée, plus d’erreurs dansCBS.log.
En bref : la corruption de deux catalogues persistants bloquait l’enregistrement nécessaire à KB5034122, d’où le code 0x800700b7. En injectant des copies intactes puis en réinitialisant les dépôts dérivables (catroot2, SoftwareDistribution), Windows Update est revenu à l’état nominal.

