web-dev-qa-db-fra.com

Comment réparer opencl.dll corrompu dans Windows 10, si SFC et DISM échouent?

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.

34
Daniel

Pour résoudre ce problème, vous devez avoir l'ISO de la version exacte que vous avez installée.

  1. Montez l'image ISO.
  2. Créez un répertoire temporaire pour monter le fichier image Windows (WIM).
    mkdir C:\WIM
  3. Montez le fichier WIM.
    Dism /Mount-Wim /WimFile:D:\sources\install.wim /index:1 /MountDir:C:\WIM /ReadOnly
  4. Exécutez Dism avec les paramètres suivants.
    Dism /Online /Cleanup-Image /RestoreHealth /Source:C:\WIM\Windows /LimitAccess
  5. Une fois terminé, démontez l'image et supprimez le dossier
    Dism /Unmount-Wim /MountDir:C:\WIM /Discard rmdir C:\WIM
  6. Il est obligatoire de redémarrer votre ordinateur, sinon SFC et DISM afficheront toujours des erreurs.

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.

43
Daniel

À partir de divers forums sur Internet, j'ai assemblé la procédure de réparation suivante:

  1. Téléchargez MediaCreationTool depuis http://go.Microsoft.com/fwlink/?LinkId=691209
  2. Téléchargez l'ISO de Windows 10 Pro avec MediaCreationTool.exe à c:\temp\windows.iso
  3. Utilisez 7-Zip pour extraire le fichier c:\temp\windows.iso dans le dossier c:\temp\windows
  4. 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

  5. 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

  6. 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

  7. 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.

  8. Redémarrez Windows
  9. 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.

10
kapitanrum

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 ).

4
verdy_p

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:

  1. Cela a commencé pour moi avec un échec de Windows Update (erreur 0x800705b4).
  2. J'ai ensuite chassé cette erreur en faisant des dépanneurs Windows Update, des WUResets, en désactivant l'antivirus, etc. Ce lien est un bon article donnant des options pour ce problème (bien qu'ils ne m'aient pas aidé)
  3. J'ai ensuite emprunté le chemin DISM et SFC. Ce message ServerFault a été très utile dans cette tentative. Malheureusement, aucune de ces options n'a aidé. Je n'arrêtais pas de me dire que j'avais un fichier opencl.dll corrompu et que l'exécution de toutes sortes de variantes de DISM/RestoreHealth ne fonctionnait pas. J'ai continué à obtenir 0x800f081f (les fichiers source sont introuvables)
  4. J'ai ensuite essayé de copier manuellement opencl.dll à partir d'une image ISO propre dans C:\Windows\SysWOW64. Cela n'a jamais fonctionné, même après avoir gâché la prise de possession, etc. J'ai finalement désactivé le pilote GPU NVIDIA GeForce dans le Gestionnaire de périphériques (laissant un pilote Intel toujours activé) et j'ai pu copier le clean opencl.dll dans C:\Windows\SysWOW64.

À 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).

2
BRass

J'ai résolu le problème avec opengl.dll comme suit:

  1. Montez l'image Windows 10.

  2. 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

  3. sfc/scannow

Bonne chance!

2
Vitaly Stelmakov

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é.

1
Martin

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.

0
Gerd Röthig

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.

0
JW0914

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.

0
Chris