我花了几个小时来解决这个问题,因为本地组件存储已损坏,并且计算机正在访问本地 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 并没有解决这个问题。
要解决此问题,您需要拥有已安装的确切版本的 ISO。
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
那应该可以解决问题。
编辑
正如评论中指出的那样,可能有更直接的方法。TL;DR 是,它对我不起作用,因此我的方法更详细。但是,如果您对直接方法有任何问题,我很感兴趣。请评论。
从互联网上的各种论坛,我组装了以下修复程序:
MediaCreationTool.exe
到c:\temp\windows.iso
c:\temp\windows.iso
到文件夹c:\temp\windows
转换
install.esd
为install.wim
.wim
文件索引中的检查索引和 windows 版本-
用于参数中的下一个 Dism 命令/Source:wim:path_to_wim:[index]
从下载和转换的 Windows 映像 (wim) 恢复健康 Windows 组件:
修复损坏的文件:
它将修复损坏的文件 - 成功消息:
Windows Resource Protection found corrupt files and successfully repaired them.
再次检查系统文件以确保成功修复:
扫描成功消息:
Windows Resource Protection did not find any integrity violations.
ESD 不是“加密”的 WIM,它是高度打包/重新编码的 WIM,其结构非常不同(具有更复杂的结构)。
WIM 只是由 4KB 或 16KB 的牢不可破的单元“快速”压缩,使用快速 Huffmann 压缩。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 中(非常慢)。
我用opengl.dll解决了如下问题:
挂载 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\
证监会 /scannow
祝你好运!
我花了几天时间沿着这些路径走下去,终于找到了适合我情况的解决方案。我正在运行 Windows 10 版本 1511 Build 10586.545。这是我的进展:
从这里开始,Windows 更新再次开始工作。
因此,总而言之,如果您遇到这些错误并且似乎没有任何效果,请尝试禁用 NVIDIA GeForce 驱动程序,然后尝试其中一些步骤(或手动复制 DLL 的干净版本)。
由于没有本地副本,并且由于其他原因无法下载 ISO 文件(ISO 不是我安装的 Windows 10 类型) ,我在这里使用了一个修补程序解决方案,其中涉及下载一个名为“SFCFix”的专业文件“:
请注意,不使用修补程序 ZIP 运行 SCFFix.exe 文件将是一个漫长而缓慢的过程,收效甚微,您需要使用 ZIP 文件拖放方法运行它,结果几乎是即时的。
根据 DISM technet 文章,您应该能够使用 esd 映像。ESD(电子软件交付)映像只是 WIM 的加密版本,并且碰巧使用了比 WIM 格式更好的压缩算法(通常大约是 1.5 倍的压缩率)。
如果只有 ESD,但更愿意使用 WIM,则可以使用 DISM 导出命令将 ESD 转换为 WIM。您还可以通过在 export 或 capture 命令中指定 /compress:recovery 将 WIM 转换为 ESD。将一个转换为另一个是资源密集型的,因此,建议使用多年前编写的 ESD 到 WIM 脚本,该脚本可在 MSFN 论坛上找到。使用该脚本,只有约 50% 的系统资源专用于导出,而通常用于导出的 90% 以上。
我刚刚去了另一台 Windows 10 Pro x64 机器并复制了 opencl.dll 文件(来自同一目录)。然后我获得了坏的 opencl.dll 的所有权,将其重命名为 opencl.old,并复制到新的中。重新启动回到安全模式并运行 sfc /scannow 并恢复正常。就我而言,这是 cbs.log 中列出的唯一坏文件……如果您有许多损坏的文件并且不想单独修补每个文件,我可以看到让 sfc 工作可能会更好。但是,如果您的问题只是一个 dll,那么一个简单的副本似乎可以工作。
Creator's Update 安装媒体中的安装映像 ( ) 似乎
install.esd
与此处描述的 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 中,必须从那里移走。此外,注册表中有两个引用必须删除。有关详细信息,请参阅链接的 sysnative 线程。