我花了几个小时来解决问题,因为本地组件存储已损坏,而且计算机正在访问本地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。
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
这应该解决这个问题。
编辑
正如评论中指出的那样,可能会有一个更直接的方法。 DR,DR是,它不适合我,因此我更详细的方法。 但是如果您对直接方法有任何疑问,我很感兴趣。 请给出意见。
从互联网上的各种论坛,我已经组装完成以下修复程序:
MediaCreationTool.exe
将Windows 10 Pro ISO下载到c:\temp\windows.iso
c:\temp\windows.iso
到文件夹c:\temp\windows
将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
检查.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
从下载和转换的Windows映像(wim)恢复运行状况Windows组件
Dism /Online /Cleanup-Image /RestoreHealth /Source:wim:c:\temp\windows\sources\install.wim:1 /LimitAccess
修复损坏的文件:
sfc /scannow
它会修复损坏的文件 – 成功的消息: Windows Resource Protection found corrupt files and successfully repaired them.
再次检查系统文件以确保成功修复:
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的问题,如下所示:
安装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
祝你好运!
我花了几天的时间走下去,终于find了解决scheme。 我正在运行Windows 10版本1511生成10586.545。 这是我的进展:
从这里开始,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中有两个引用必须删除。 有关详细信息,请参阅链接的系统性线程。