Il m'a fallu plusieurs heures pour résoudre le problème car le magasin de composants local était corrompu et les ordinateurs accèdent à un serveur WSUS local au lieu du serveur de mise à jour public par Microsoft (et parce que j'utilise Dism très rarement ). Pour référence et pour aider d'autres personnes avec le même problème, je vais écrire une description du problème et fournir une solution.
Depuis la mise à niveau vers Windows 10 Pro version 1511 (build 10586), j'ai un problème avec un fichier opencl.dll déposé corrompu à plusieurs endroits.
J'ai essayé sfc.exe /scannow
, mais il n'a pas résolu le problème. Les messages d'erreur sont, entre autres:
2015-12-08 08:50:43, Info CSI 00003c3a Hashes for file member \SystemRoot\WinSxS\wow64_Microsoft-windows-r..xwddmdriver-wow64-c_31bf3856ad364e35_10.0.10586.0_none_3dae054b56911c22\opencl.dll do not match actual file [l:10]"opencl.dll" :
Found: {l:32 g2VAunZ6/2J1G3oL7kf9fjInPUA9VYeiJcl9VKgizaY=} Expected: {l:32 9rnAnuwzPjMQA7sW63oNAVhckspIngsqJXKYSUeQ5Do=}
2015-12-08 08:50:43, Info CSI 00003c3b [SR] Cannot repair member file [l:10]"opencl.dll" of Microsoft-windows-RemoteFX-clientVM-RemoteFXWDDMDriver-WOW64-C, version 10.0.10586.0, Arch Host= AMD64 Guest= x86, nonSxS, pkt {l:8 b:31bf3856ad364e35} in the store, hash mismatch
2015-12-08 08:50:43, Info CSI 00003c3c [SR] This component was referenced by [l:125]"Microsoft-Windows-RemoteFX-VM-Setup-Package~31bf3856ad364e35~AMD64~~10.0.10586.0.RemoteFX clientVM and UMTS files and regkeys"
2015-12-08 08:50:43, Info CSI 00003c3d Hashes for file member \??\C:\WINDOWS\SysWOW64\opencl.dll do not match actual file [l:10]"opencl.dll" :
Found: {l:32 g2VAunZ6/2J1G3oL7kf9fjInPUA9VYeiJcl9VKgizaY=} Expected: {l:32 9rnAnuwzPjMQA7sW63oNAVhckspIngsqJXKYSUeQ5Do=}
2015-12-08 08:50:43, Info CSI 00003c3e Hashes for file member \SystemRoot\WinSxS\wow64_Microsoft-windows-r..xwddmdriver-wow64-c_31bf3856ad364e35_10.0.10586.0_none_3dae054b56911c22\opencl.dll do not match actual file [l:10]"opencl.dll" :
Found: {l:32 g2VAunZ6/2J1G3oL7kf9fjInPUA9VYeiJcl9VKgizaY=} Expected: {l:32 9rnAnuwzPjMQA7sW63oNAVhckspIngsqJXKYSUeQ5Do=}
2015-12-08 08:50:43, Info CSI 00003c3f [SR] Could not reproject corrupted file [l:23 ml:24]"\??\C:\WINDOWS\SysWOW64"\[l:10]"opencl.dll"; source file in store is also corrupted
D'accord, donc le problème est clair maintenant. Malheureusement, [~ # ~] sfc [~ # ~] ne peut pas résoudre la corruption car le magasin de composants local a également été corrompu. Malheureusement, j'ai perdu les messages d'erreur indiquant les corruptions du magasin de composants.
J'ai donc essayé Dism /Online /Cleanup-Image /RestoreHealth
en vain. Il échoue avec l'erreur x800f081f, indiquant un autre problème avec les fichiers source.
2015-12-08 08:57:35, Info CBS Exec: Download qualification evaluation, business scenario: Manual Corruption Repair
2015-12-08 08:57:35, Info CBS Exec: Clients specified using Windows Update.
2015-12-08 08:57:35, Info CBS WU: Update service is not default AU service, skip. URL: https://fe2.update.Microsoft.com/v6/, Name: Microsoft Update
2015-12-08 08:57:35, Info CBS WU: Update service is not default AU service, skip. URL: https://fe2.ws.Microsoft.com/v6/, Name: Windows Store
2015-12-08 08:57:35, Info CBS WU: Update service is not default AU service, skip. URL: https://fe3.delivery.mp.Microsoft.com/, Name: Windows Store (DCat Prod)
2015-12-08 08:57:35, Info CBS WU: WSUS service is the default, URL: (null), Name: Windows Server Update Service
2015-12-08 08:57:35, Info CBS DWLD:Search is done, set download progress to 20 percent.
2015-12-08 08:57:35, Info CBS Nothing to download, unexpected
2015-12-08 08:57:35, Info CBS Failed to collect payload and there is nothing to repair. [HRESULT = 0x800f081f - CBS_E_SOURCE_MISSING]
2015-12-08 08:57:35, Info CBS Failed to repair store. [HRESULT = 0x800f081f - CBS_E_SOURCE_MISSING]
En regardant les messages d'erreur, il devient clair que Windows est configuré pour utiliser notre serveur WSUS local et que Dism n'est donc pas en mesure de récupérer le fichier valide à partir des référentiels. Bien que je suis sûr que je pourrais en quelque sorte configurer WSUS pour fournir les fichiers nécessaires, je ne sais pas comment et j'ai besoin d'une solution rapide. (Si quelqu'un sait comment configurer WSUS en conséquence, veuillez fournir des informations).
Limiter l'accès au stockage local en ajoutant le paramètre /LimitAccess
serait inutile car le magasin de composants local est également corrompu, comme mentionné précédemment.
J'ai rencontré ce problème sur deux machines. Un rafraîchissement de Windows 10 n'a pas résolu le problème.
Pour résoudre ce problème, vous devez avoir l'ISO de la version exacte que vous avez installée.
mkdir C:\WIM
Dism /Mount-Wim /WimFile:D:\sources\install.wim /index:1 /MountDir:C:\WIM /ReadOnly
Dism /Online /Cleanup-Image /RestoreHealth /Source:C:\WIM\Windows /LimitAccess
Dism /Unmount-Wim /MountDir:C:\WIM /Discard rmdir C:\WIM
Cela devrait résoudre le problème.
Modifier
Comme indiqué dans les commentaires, il pourrait y avoir une approche plus directe. Le TL; DR est qu'il n'a pas fonctionné pour moi, d'où mon approche plus détaillée. Mais je suis intéressé si vous avez eu des problèmes avec l'approche directe. Commentez s'il vous plaît.
À partir de divers forums sur Internet, j'ai assemblé la procédure de réparation suivante:
MediaCreationTool.exe
à c:\temp\windows.iso
c:\temp\windows.iso
dans le dossier c:\temp\windows
Convertir install.esd
à install.wim
Dism /Export-Image /SourceImageFile:c:\temp\windows\sources\install.esd /SourceIndex:1 /DestinationImageFile:c:\temp\windows\sources\install.wim /compress:max
Vérifiez l'index et la version de Windows dans .wim
fichier-
index est utilisé pour la prochaine commande Dism dans le paramètre /Source:wim:path_to_wim:[index]
Dism /Get-WimInfo /wimFile:c:\temp\windows\sources\install.wim
Restaurer les composants Windows de santé à partir de l'image Windows téléchargée et convertie (WIM):
Dism /Online /Cleanup-Image /RestoreHealth /Source:wim:c:\temp\windows\sources\install.wim:1 /LimitAccess
Réparer les fichiers corrompus:
sfc /scannow
Il réparera les fichiers corrompus - message de réussite: Windows Resource Protection found corrupt files and successfully repaired them.
Vérifiez à nouveau les fichiers système pour vous assurer que la réparation est réussie:
sfc /scannow
Message de réussite après l'analyse: Windows Resource Protection did not find any integrity violations.
Un ESD n'est pas un WIM "crypté", c'est un WIM qui a été fortement compressé/réencodé très différemment (avec une structure plus complexe).
Un WIM est simplement "rapide" compressé par des unités incassables de 4 Ko ou 16 Ko, en utilisant une compression Huffmann rapide. Un ESD utilise une compression basée sur LZ plus avancée sans limitation de taille de bloc. Cette compression ne permet pas d'ouvrir l'image en mode lecture-écriture car la compression est globale (chaque fichier dans l'archive n'est plus compressé séparément, plusieurs fichiers logiques peuvent partager le stockage réel des segments, pour atteindre un niveau de compression plus élevé, notamment lorsqu'il existe de nombreux petits fichiers avec des en-têtes communs, tels que des collections d'icônes ou des parties de leurs données de signature numérique , avis de droit d'auteur, en-têtes HTML, scripts intégrés, etc.).
Un SWM est un WIM en plusieurs parties qui a été divisé en plusieurs fichiers avec des tailles plus petites avec une taille maximale (approximative), mais il est toujours inscriptible et peut être stocké sur plusieurs DVD.
Les fournisseurs CBS autorisent plusieurs formats d'archivage pouvant être pris en charge par DISM, y compris WIM, CAB, Zip, VHD, VHDX, ISO multisession ... Mais Windows est livré avec deux fournisseurs intégrés pour le WIM et ESD formats (ESD est nouveau dans Windows 10, avec Windows 8, seul le format WIM était pris en charge, mais les images étaient plus grandes)
Le format ESD a été réglé pour permettre à la distribution multilingue complète de Windows 10 de tenir sur un seul DVD de moins de 3 Go ...
Vous pouvez transformer un ESD en WIM, mais le résultat sera un fichier beaucoup plus volumineux. La conversion inverse est également possible (afin que vous puissiez lire et écrire dans le WIM développé) pour le reconditionner dans un nouvel ESD. La décompression d'un ESD vers WIM est relativement rapide, mais la compression d'un WIM vers ESD nécessite beaucoup de ressources CPU et est beaucoup plus longue (c'est pourquoi vous ne pouvez pas lire-écrire directement dans un ESD mais vous pouvez le faire assez facilement dans un WIM avec une utilisation modérée du CPU).
Lorsque vous "montez" un ESD avec DISM, la première chose qu'il fera est d'étendre le ESD dans un stockage temporaire et d'agir comme s'il était un WIM, afin que vous puissiez mettre à jour les fichiers dans ce stockage local. Le démonter nécessitera deux étapes: recréer un WIM (assez rapide), puis le recompresser dans un ESD (très lent ).
J'ai passé quelques jours sur ces chemins et j'ai finalement trouvé une solution à ma situation. J'utilise Windows 10 version 1511 Build 10586.545. Voici ma progression:
À partir de là, Windows Update a recommencé à fonctionner.
Donc, en résumé, si vous rencontrez des problèmes avec ces erreurs et que rien ne semble fonctionner, essayez de désactiver les pilotes NVIDIA GeForce, puis essayez certaines de ces étapes (ou copiez manuellement dans une version propre de la DLL).
J'ai résolu le problème avec opengl.dll comme suit:
Montez l'image Windows 10.
Dism/Online/Cleanup-Image/RestoreHealth/Source: esd: F:\sources\install.esd\1\Windows\WinSxS\wow64_Microsoft-windows-r..xwddmdriver-wow64-c_31bf3856ad364e35_10.0.10586.0_none_3dae054b56911c22
sfc/scannow
Bonne chance!
En raison de l'absence d'une copie locale et pour une raison distincte, impossible de télécharger le fichier ISO (l'ISO n'était pas du type Windows 10 que j'ai installé) Il y a solution de correctif ici que j'ai utilisé, ce qui implique téléchargement d'un fichier spécialisé appelé "SFCFix":
SFCFix est un petit utilitaire brillant qui est capable de résoudre ce problème pour vous en réparant/remplaçant le fichier dll corrompu.
Une fois le fichier exécutable pour SFCFix téléchargé, déplacez-le sur votre bureau.
A fichier Zip contenant tout ce dont SFCFix a besoin afin de réparer/remplacer votre fichier opencl.dll corrompu. Le site Web vous demandera de vous y inscrire pour accéder au fichier Zip, vous devez le faire car il est entièrement gratuit.
Une fois sfcfix.Zip téléchargé, déplacez-le sur votre bureau. Fermez tous les programmes ouverts. Faites glisser le fichier Zip sur le fichier exécutable du programme SFCFix, puis relâchez-le.
SFCFix lancera et commencera à appliquer le correctif pour le fichier dll corrompu. Laissez-le faire sa magie.
Une fois SFCFix terminé, il créera un fichier nommé
SFCFix.txt
sur votre bureau. Ouvrez ce fichier et, si SFCFix a réussi à réparer/remplacer votre fichier opencl.dll corrompu,
Veuillez noter que l'exécution du fichier SFCFix.exe sans le correctif Zip sera un processus long et lent qui ne produit que très peu, vous devez l'exécuter avec le Zip méthode de glisser/déposer de fichiers, et le résultat est presque instantané.
Il semble que l'image d'installation (install.esd
) du support d'installation de Creator's Update est incompatible avec la méthode DISM décrite ici. Vous obtiendrez une erreur 0x800f081f
quel que soit le type de commande que vous tapez. Cela n'aide pas non plus à extraire la bonne install.wim
du fichier ESD. Enfin, j'ai même essayé de monter le fichier WIM en vain.
Voir également les discussions sur https://www.sysnative.com/forums/windows-10-a/22564-dism-error-0x800f081f.html#post17972
Mise à jour: l'erreur persistante n'a rien à voir avec la commande dism ou les fichiers wim. Cela est dû à un package nommé Microsoft-Windows-TestRoot-and-FlightSigning-Package pour lequel aucune source de travail n'est disponible. Les fichiers se trouvent dans C:\Windows\Servicing\Packages et doivent être éloignés de là. En outre, il existe deux références dans le registre qui doivent être supprimées. Voir le thread système lié pour plus de détails.
Vous devriez pouvoir utiliser une image esd, selon l'article de technet DISM. Une image ESD (Electronic Software Delivery) est simplement une version chiffrée d'un WIM et utilise également un algorithme de compression bien meilleur que le format WIM (généralement une compression environ 1,5 fois supérieure).
Si tout ce que vous avez est un ESD, mais préférez utiliser un WIM, vous pouvez convertir un ESD en WIM avec la commande d'exportation DISM. Vous pouvez également convertir un WIM en ESD en spécifiant/compress: recovery dans la commande d'exportation ou de capture. La conversion de l'un en l'autre consomme beaucoup de ressources, et pour cette raison, il est recommandé d'utiliser le ESD vers le script WIM qui était écrit il y a des années et est disponible sur le forum MSFN. En utilisant le script, seulement ~ 50% des ressources du système sont dédiées à l'exportation contre les 90% + qui sont généralement utilisés pour l'exportation.
Je viens d'aller sur une autre machine Windows 10 Pro x64 et j'ai copié le fichier opencl.dll (à partir du même répertoire). Ensuite, j'ai pris possession du mauvais opencl.dll, l'ai renommé opencl.old et copié dans le nouveau. Redémarrez en mode sans échec et exécutez sfc/scannow et ça revient bien. Dans mon cas, c'était le SEUL fichier incorrect répertorié dans cbs.log ... Je peux voir où il pourrait être préférable de faire fonctionner sfc si vous avez beaucoup de fichiers corrompus et que vous ne voulez pas patcher chacun individuellement. Mais si votre problème n'est qu'une seule DLL, une simple copie semble fonctionner.