如何修复在Windows 10损坏的opencl.dll,如果SFC和DISM失败?

我花了几个小时来解决问题,因为本地组件存储已损坏,而且计算机正在访问本地WSUS服务器,而不是Microsoft的公共更新服务器(因为我很less使用Dism)。 作为参考和帮助有同样问题的其他人,我会写下问题描述并提供一个解决scheme。

由于升级到Windows 10专业版1511(内部版本10586)我有一个在几个位置损坏的文件存在问题opencl.dll

我试过sfc.exe /scannow ,但是没能解决这个问题。 错误信息包括:

 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 

好的,现在问题就清楚了。 不幸的是, SFC无法解决损坏,因为本地组件存储也损坏了。 不幸的是,我丢失了指示组件商店损坏的错误消息。

所以我尝试了Dism /Online /Cleanup-Image /RestoreHealth无济于事。 它失败,错误0x800f081f ,指示源文件的另一个问题。

 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] 

查看错误消息,很明显,Windows设置为使用我们的本地WSUS服务器,因此Dism无法从存储库检索有效的文件。 虽然我确信我可以以某种方式configurationWSUS来提供必要的文件,但我不知道如何和我需要快速修复。 (如果有人知道如何configurationWSUS,请提供信息)。

/LimitAccess通过添加参数/LimitAccess来限制对本地存储的访问将是无用的,因为本地组件存储也被损坏。

我在两台机器上遇到过这个问题。 Windows 10的刷新并没有解决这个问题。

    要解决这个问题,你需要具有你已经安装的确切版本的ISO。

    1. 挂载ISO映像。
    2. 创build一个临时目录来安装Windows映像文件(WIM)。
      mkdir C:\WIM
    3. 装入WIM文件。
      Dism /Mount-Wim /WimFile:D:\sources\install.wim /index:1 /MountDir:C:\WIM /ReadOnly
    4. 使用以下参数运行Dism。
      Dism /Online /Cleanup-Image /RestoreHealth /Source:C:\WIM\Windows /LimitAccess
    5. 完成后,卸载图像并删除文件夹
      Dism /Unmount-Wim /MountDir:C:\WIM /Discard rmdir C:\WIM
    6. 必须重新启动计算机,否则SFC和DISM仍将显示错误。

    这应该解决这个问题。

    编辑
    正如评论中指出的那样,可能会有一个更直接的方法。 DR,DR是,它不适合我,因此我更详细的方法。 但是如果您对直接方法有任何疑问,我很感兴趣。 请给出意见。

    从互联网上的各种论坛,我已经组装完成以下修复程序:

    1. http://go.microsoft.com/fwlink/?LinkId=691209下载MediaCreationTool
    2. 使用MediaCreationTool.exe将Windows 10 Pro ISO下载到c:\temp\windows.iso
    3. 使用7-zip提取文件c:\temp\windows.iso到文件夹c:\temp\windows
    4. 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. 检查.wim文件中的索引和Windows版本
      - index用于参数/Source:wim:path_to_wim:[index]下一个Dism命令/Source:wim:path_to_wim:[index]

      Dism /Get-WimInfo /wimFile:c:\temp\windows\sources\install.wim

    6. 从下载和转换的Windows映像(wim)恢复运行状况Windows组件

      Dism /Online /Cleanup-Image /RestoreHealth /Source:wim:c:\temp\windows\sources\install.wim:1 /LimitAccess

    7. 修复损坏的文件:

      sfc /scannow

      它会修复损坏的文件 – 成功的消息: Windows Resource Protection found corrupt files and successfully repaired them.

    8. 重新启动Windows
    9. 再次检查系统文件以确保成功修复:

      sfc /scannow

      扫描完成后的成功消息: Windows Resource Protection did not find any integrity violations.

    一个ESD不是一个“encryption的”WIM,它是一个高度压缩不同的WIM。

    WIM使用快速的Huffmann压缩技术,通过4KB或16KB的不可破坏单元进行“快速”压缩。 ESD使用更先进的基于LZ的压缩,没有块大小的限制。 由于压缩是全局的,因此该压缩不允许图像以读写模式打开。

    一个SWM是一个多部分的WIM,它被分割成多个文件,尺寸较小,最大的尺寸是粗略的,但它仍然是可写的,可以存储在多张DVD上。

    CBS提供商允许DISM支持多种归档格式,包括WIM,CAB,ZIP,VHD,VHDX,多区段ISO …但是Windows为WIM和ESD格式提供了两个内置提供程序(ESD是Windows 10,与Windows 8,只支持WIM格式,但图像较大)

    ESD格式已经过调整,允许Windows 10完全多语言分发,以适应less于3GB的单个DVD …

    我解决了opengl.dll的问题,如下所示:

    1. 安装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

    祝你好运!

    我花了几天的时间走下去,终于find了解决scheme。 我正在运行Windows 10版本1511生成10586.545。 这是我的进展:

    1. 这开始了我的Windows更新失败(错误0x800705b4)。
    2. 然后,我追逐这个错误做Windows Update疑难解答,WUResets,禁用防病毒等。 这个链接是一个很好的文章给这个问题的选项(虽然他们没有帮助我)
    3. 然后我走了DISM和SFCpath。 这个ServerFault文章是非常有帮助的尝试。 不幸的是这些选项都没有帮助。 我不断得到告诉我有一个损坏的opencl.dll文件,运行DISM / RestoreHealth的各种变化不起作用。 我不断得到0x800f081f(源文件找不到)
    4. 我接下来尝试从一个干净的ISO手动复制opencl.dll到C:\ Windows \ SysWOW64。 这从来没有工作,甚至在弄乱取得所有权后,我终于禁用NVIDIA GeForce GPU驱动程序在设备pipe理器(离开英特尔驱动程序仍然启用显示),并能够将干净的opencl.dll复制到C:\ Windows \ Syswow64资料。

    从这里开始,Windows Update又开始工作了。

    所以总的来说,如果您正在为这些错误而苦恼,而且似乎没有任何工作,请尝试禁用NVIDIA GeForce驱动程序,然后尝试其中一些步骤(或手动复制一个干净版本的DLL)。

    由于没有本地副本,并且由于单独的原因无法下载ISO文件(ISO不是我安装的Windows 10types)这里有一个修补程序解决scheme ,我使用了这个解决scheme ,其中包括下载名为“SFCFix “:

    SFCFix是一个辉煌的小工具,能够通过修复/replace损坏的dll文件来解决这个问题。

    一旦下载了SFCFix的可执行文件,将其移至桌面。

    一个ZIP文件,其中包含SFCFix修复/replace损坏的opencl.dll文件所需的一切 。 您将被网站要求注册以获得对ZIP文件的访问权限,您应该这样做,因为它是完全免费的。

    一旦下载了sfcfix.zip,将其移动到您的桌面。 closures所有打开的程序。 将ZIP文件拖到SFCFix程序的可执行文件上,然后释放它。

    SFCFix将启动并开始应用修复损坏的DLL文件。 让它发挥它的魔力。

    一旦SFCFix完成,它将在您的桌面上创build一个名为SFCFix.txt的文件。 打开这个文件,如果SFCFix成功修复/replace损坏的opencl.dll文件,

    请注意,运行SFCFix.exe文件而不使用修补程序ZIP将是一个很慢的过程,实现很less,您需要使用ZIP文件拖放方法运行它,结果几乎是即时的。

    根据DISM technet文章,您应该能够使用esd映像。 一个ESD(电子软件交付)图像仅仅是一个WIM的encryption版本,并且恰好利用了比WIM格式更好的压缩algorithm(通常约为压缩的1.5倍)。

    如果所有人都有ESD,但宁愿使用WIM,则可以使用DISM导出命令将ESD转换为WIM。 您还可以通过在导出或捕获命令中指定/ compress:recovery来将WIM转换为ESD。 将一个转换为另一个是资源密集型的,因此,build议使用多年前编写的ESD至WIM脚本,并在MSFN论坛上提供。 通过使用脚本,只有约50%的系统资源用于出口,而出口通常使用90%以上的系统资源。

    我刚刚去了另一台Windows 10 Pro x64机器,并复制了opencl.dll文件(来自同一个目录)。 然后我把所有权的坏opencl.dll,改名为opencl.old,并复制到新的。 重新启动到安全模式并运行sfc / scannow,它恢复正常。 在我的情况下,这是cbs.log中列出的唯一的不良文件…我可以看到,如果你有许多损坏的文件,并不想单独修补每个sfc工作可能会更好。 但是,如果你的问题只是一个DLL,那么简单的副本似乎工作。

    似乎来自Creator的更新安装介质的安装映像( install.esd )与此处所述的DISM方法不兼容。 无论您input哪种命令,都会收到错误0x800f081f 。 它也无法从ESD文件中提取正确的install.wim 。 最后,我甚至尝试安装WIM文件也无济于事。

    另见https://www.sysnative.com/forums/windows-10-a/22564-dism-error-0x800f081f.html#post179723上的讨论

    更新:持久性错误与dism命令或wim文件无关。 这是由于一个名为Microsoft-Windows-TestRoot-and-FlightSigning-Package的包没有可用的工作源。 这些文件位于C:\ Windows \ Servicing \ Packages中,必须从此处移开。 此外,在registry中有两个引用必须删除。 有关详细信息,请参阅链接的系统性线程。