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


33

由于本地组件存储已损坏,并且计算机正在访问本地WSUS服务器,而不是Microsoft访问的公共更新服务器,我花了几个小时才能解决此问题(并且因为我很少使用Dism)。为了参考并帮助其他人解决同一问题,我将写下问题描述并提供解决方案。

自从升级到Windows 10 Pro版本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无法从存储库中检索有效文件。虽然我确定可以以某种方式配置WSUS以提供必要的文件,但我不知道如何,我需要快速修复。(如果有人知道如何相应地配置WSUS,请提供信息)。

/LimitAccess如前所述,通过添加参数来限制对本地存储的访问是没有用的,因为本地组件存储也已损坏。

我在两台计算机上遇到了这个问题。一个更新的Windows 10的未解决的问题。


FWIW还有很长的螺纹这里answers.microsoft.com/en-us/windows/forum/...有关与此DLL问题。
罗里

Answers:


42

要解决此问题,您需要具有已安装的确切版本的ISO。

  1. 挂载ISO映像。
  2. 创建一个临时目录来挂载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仍然会显示错误。

那应该解决问题。

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


2
您无需安装WIM即可指向WIM:superuser.com/a/870956/174557
magicandre1981

3
@ magicandre1981感谢您的评论。我读到了有关内容,但没有成功。它总是失败,并显示一个错误,我记得是0x800f081f。令人惊讶的是,我/source:wimDism Command Line Options的官方文档中找不到与该参数有关的任何内容。
丹尼尔(Daniel)

:我在这里的内容念给启用功能blogs.technet.com/b/joscon/archive/2013/03/29/...
magicandre1981

2
这也为其他用户提供了帮助:borncity.com/blog/2015/12/09 / ...奇怪的是安装成功,但没有直接通过WIM。
magicandre1981 '16

4
使用Media Creation Tool下载Windows 10映像后,请访问:microsoft.com/en-ca/software-download/windows10,结果img中包含install.esd,必须将其转换为WIM才能挂载。由Dism。我使用NTLite这样做。在那之后,丹尼尔的指示工作正常。请注意,第三步中的/ index参数可能应该反映您要还原的Windows,Pro或Home的版本(换句话说,对于Pro使用/ index:1,对于Home使用/ index:2)
Eli B.16年

10

通过Internet上的各种论坛,我组装了以下修复程序:

  1. http://go.microsoft.com/fwlink/?LinkId=691209下载MediaCreationTool
  2. 将Windows 10 Pro ISO下载MediaCreationTool.exec:\temp\windows.iso
  3. 使用7-zip c:\temp\windows.iso将文件提取到文件夹c:\temp\windows
  4. 转换install.esdinstall.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版本用于参数中的下一个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.


1
由于此最终修复了我的Windows 10安装,不久前我刚刚进行了全新安装。似乎不小心搞砸了,甚至在进行全新安装后sfc也会很快失效!无论如何,这次会保持多长时间!猜猜微软仍然没有在最新的win 10更新中修复它,因为这似乎是1511版本新闻的已知问题。ps不必执行第4步,尽管自从install.wim出现时,提取了Windows ISO。
daveangel

感谢您的回应。安装图形驱动程序后,系统文件检查器将损坏。但是现在仅使用运行SFC / SCANNOW即可修复系统-似乎现在可以在winsxs文件夹中找到opencl.dll的正确版本。PS:的确,如果下载可启动的ISO,则可能会省略第4步,但是媒体创建工具仅下载ESD文件(为升级Windows 10设计的版本)。媒体创建工具是自动下载正确的安装媒体的最佳选择:-)
kapitanrum '16

第4步(提取WIM文件)为我做了。优秀的指南。谢谢。
拉维·瓦劳

1
第6步对我失败,显示“找不到源文件”,错误0x800f091f
simpleuser

我用Google搜索错误0x800f091f,问题可能出在安装.NET Framework 3.5上。如果只有4+版,则也尝试安装3.5版。试试MS安装指南:msdn.microsoft.com/en-us/library/hh506443
v=vs.110).aspx

4

ESD不是“加密的” WIM,它是一种高度打包/重新编码非常不同的WIM(结构更为复杂)。

使用快速霍夫曼压缩,WIM只是通过4KB或16KB的不可破坏单元进行“快速”压缩。ESD使用更高级的基于LZ的压缩,而没有块大小的限制。由于压缩是全局压缩,因此此压缩不允许以读写模式打开图像(存档中的每个文件不再单独压缩,多个逻辑文件可以共享段的实际存储,以达到更高的压缩率)级别,尤其是当有许多小文件时,它们的标题部分都相同,例如图标的集合或它们的数字签名数据的一部分,版权声明,HTML标题,嵌入式脚本等)。

SWM是一个多部分WIM,已拆分为多个较小的文件,最大大小为(大约)最大大小,但仍可写,并且可以存储在多个DVD上。

CBS提供程序允许DISM支持多种存档格式,包括WIM,CAB,ZIP,VHD,VHDX,多会话ISO。但是Windows带有两个内置的WIM和ESD格式提供程序(ESD是Windows 10的新增功能,在Windows 8中,仅支持WIM格式,但图像较大)

ESD格式已进行了调整,以允许Windows 10的完整多语种发行版适合小于3GB的单个DVD ...

您可以将ESD转换为WIM,但结果将是一个更大的文件。也可以进行逆转换(以便您可以在扩展的WIM中进行读写),以将其再次打包到新的ESD中。将ESD解压缩到WIM相对较快,但是将WIM压缩到ESD需要大量的CPU资源,并且需要更长的时间(这就是为什么您不能直接读写到ESD,但是您可以在具有适度WIM的情况下很容易地做到这一点CPU使用率)。

当用DISM“挂载” ESD时,要做的第一件事是将ESD扩展到临时存储中并对其进行处理,就好像它是WIM一样,以便您可以更新此本地存储中的文件。卸载它需要两个步骤:重新创建WIM(非常快),然后再次将其打包到ESD(非常慢)中。


2

我用以下方法解决了opengl.dll的问题:

  1. 挂载Windows 10映像。

  2. Dism /在线/ 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. 证监会/ scannow

祝好运!


6
ESD ISO未还原Windows映像。您必须仅使用WIM ISO,可以从microsoft.com/en-us/software-download/techbench
23W,2015年

2

我花了几天的时间沿着这些路走,终于找到了适合我情况的解决方案。我正在运行Windows 10版本1511 Build 10586.545。这是我的进度:

  1. 这是因为Windows Update失败(错误0x800705b4)而开始的。
  2. 然后,我在执行Windows Update故障排除程序,WUResets,禁用防病毒等操作时追逐了此错误。 此链接是一篇不错的文章,提供了针对该问题的选项(尽管它们并没有帮助我)
  3. 然后,我沿着DISM和SFC路径前进。该ServerFault帖子在该尝试中非常有帮助。不幸的是,这些选择都没有帮助。我一直被告知我有一个损坏的opencl.dll文件,并且无法运行各种DISM / RestoreHealth变体。我一直收到0x800f081f(找不到源文件)
  4. 接下来,我尝试将opencl.dll从干净的ISO手动复制到C:\ Windows \ SysWOW64。即使在迷失所有权之后,这也从未奏效。我最终在设备管理器中禁用了NVIDIA GeForce GPU驱动程序(使Intel驱动程序仍启用显示),并且能够将干净的opencl.dll复制到C:\ Windows \ SysWOW64。

从这里开始,Windows Update再次开始工作。

因此,总而言之,如果您遇到这些错误而似乎无济于事,请尝试禁用NVIDIA GeForce驱动程序,然后尝试其中一些步骤(或手动复制DLL的干净版本)。


1

由于没有本地副本,并且由于另一个原因无法下载ISO文件(ISO不是我安装的Windows 10类型的ISO),这里使用了一个修补程序解决方案,其中涉及下载名为“ SFCFix”的专家文件。 “:

SFCFix是一个出色的小实用程序,能够通过修复/替换损坏的dll文件为您解决此问题。

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

一个包含一切SFCFix需要ZIP文件,以维修/更换您的腐败opencl.dll文件。网站会要求您在其上注册以访问ZIP文件,您应该这样做,因为它是完全免费的。

下载sfcfix.zip后,将其移至桌面。关闭所有打开的程序。将ZIP文件拖到SFCFix程序的可执行文件上,然后释放它。

SFCFix将启动并开始为损坏的dll文件应用修复程序。让它发挥其魔力。

完成SFCFix后,它将创建一个SFCFix.txt在您的桌面上命名的文件。打开此文件,如果SFCFix成功修复/替换了损坏的opencl.dll文件,

请注意,运行不带 ZIP修复程序的SFCFix.exe文件将是一个漫长而缓慢的过程,几乎无法实现,您需要使用ZIP文件拖放方法来运行它,其结果几乎是即时的。


0

根据DISM technet文章,您应该能够使用esd图像。ESD(电子软件交付)映像只是WIM的加密版本,并且碰巧利用了比WIM格式更好的压缩算法(通常压缩约1.5倍)。

如果所有人都拥有ESD,而宁愿使用WIM,则可以使用DISM export命令将ESD转换为WIM。您还可以通过在export或capture命令中指定/ compress:recovery将WIM转换为ESD。相互转换会占用大量资源,因此,建议使用几年前编写的ESD to WIM脚本,该脚本可在MSFN论坛上获得。使用脚本,只有约50%的系统资源专用于导出,而通常用于导出的系统资源则占90%以上。


0

我只是去了另一台Windows 10 Pro x64计算机并复制了opencl.dll文件(从同一目录)。然后,我获得了错误的opencl.dll的所有权,将其重命名为opencl.old,并复制到了新的文件中。重新启动回到安全模式并运行sfc / scannow,它恢复正常。就我而言,这是cbs.log中列出的唯一错误文件...我可以看到,如果您有很多损坏的文件并且不想单独修补每个文件,那么在sfc上工作可能会更好。但是,如果您的问题只是一个dll,那么一个简单的副本似乎起作用。


0

似乎install.esd来自Creator's Update安装介质的安装映像()与此处描述的DISM方法不兼容。0x800f081f无论您键入哪种命令,都将出现错误。这也无助于install.wim从ESD文件中提取正确的文件。最后,我什至尝试挂载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中,并且必须从那里移开。另外,注册表中有两个引用必须删除。有关详细信息,请参见链接的系统线程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.