如何修复从 Windows 7 SP1 升级到 Windows 10 Pro(1909)时累积更新失败的问题

如何修复从 Windows 7 SP1 升级到 Windows 10 Pro(1909)时累积更新失败的问题

在持续无法安装 2020 年 2 月累积更新 (KB4532693) 后,我在 CBS.log 中看到错误 0x80070003。

记录的错误始终是:

2020-03-06 21:29:44, Error                 CBS    Shtd: Failed while processing non-critical driver operations queue. [HRESULT = 0x80070003 - ERROR_PATH_NOT_FOUND]

...其中ERROR_PATH_NOT_FOUND相应的 Win32 错误代码 (3) 被转换为HRESULT

相应的错误%WINDIR%\inf\setupapi.dev.log如下所示:

>>>  [Install Driver Updates]
>>>  Section start 2020/03/06 21:29:43.850
      cmd: C:\WINDOWS\winsxs\amd64_microsoft-windows-servicingstack_31bf3856ad364e35_10.0.18362.651_none_5f2896f458eff373\TiWorker.exe -Embedding
     sto: Image State        = Specialized
     sto: Image Architecture = amd64
     sto: Image OS Version   = 10.0.18363
     sto: Image Product Type = WinNT
     sto: Transaction        = CbsDriversAndPrimitives
     sto: Driver Updates     = 644
!    inf: Unable to load INF: 'C:\WINDOWS\System32\DriverStore\FileRepository\netathrx.inf_amd64_220db23f5419ea8d\netathrx.inf'(00000003)
!!!  inf: Invalid INF 'C:\WINDOWS\System32\DriverStore\FileRepository\netathrx.inf_amd64_220db23f5419ea8d\netathrx.inf', parsing error on line 0. Code = 1002
!!!  sto: Failed to get version info for driver update 'C:\WINDOWS\System32\DriverStore\FileRepository\netathrx.inf_amd64_220db23f5419ea8d\netathrx.inf'. Error = 0x00000003
<<<  Section end 2020/03/06 21:29:44.069
<<<  [Exit status: FAILURE(0x00000003)]

因此,我似乎正在寻找一个名为 的文件C:\WINDOWS\System32\DriverStore\FileRepository\netathrx.inf_amd64_220db23f5419ea8d\netathrx.inf。应该包含此文件的文件夹不存在。不过,父文件夹的权限 (ACL) 存在轻微问题。令人惊讶的是,该文件netathrx.inf存在于 中%WINDIR%\INF

这台笔记本电脑中确实有一个 Qualcomm Atheros 网络适配器:

Qualcomm Atheros QCA9565 / AR9565 无线网络适配器

我现在的问题是:我如何找到该文件并替换它以期之后更新安装成功?

注意:现在我已经尝试了所有方法,包括手动安装(累积)更新(使用dism /online带和不带安装方式install.wim/source,我还使用了sfc /scannow(发现并修复了问题,但此后再也没有报告过任何问题)。因此,我不知道除了使用 Windows 10 安装介质中的“修复”功能外,我还能采取什么非破坏性措施,我担心这会重置注册表中的内容,从而影响已安装的程序。


我没有第三方 AV/AM 解决方案,而是使用 Windows Defender 应用程序套件。

答案1

有问题的适配器似乎导致更新安装需要netathrx.inf以下报告lspci(在 Linux 上):

05:00.0 Network controller: Qualcomm Atheros QCA9565 / AR9565 Wireless Network Adapter (rev 01)

我选择调查该问题的方式如下:

  1. 使用 Microsoft 的媒体创建工具下载“Windows 10”的原始副本
  2. 提取匹配的 Windowsinstall.wim作为install.esd
  3. 安装 ( dism /mount-image /imagefile:install.wim /index:1 /mountdir:%CD%\mount /readonly)
  4. System32\DriverStore\FileRepository\netathrx.inf_amd64_220db23f5419ea8d\netathrx.inf检查与INF\netathrx.inf挂载点相关的内容
  5. 将上一步的文件复制到某个临时位置
  6. 卸载install.wim,丢弃所有可能的更改(dism /unmount-image /mountdir:%CD%\mount /discard

调查结果如下:

  1. 两个位置的文件似乎完全相同,且硬链接到相同的内容(在 SxS 中也经常可以看到这种情况)
  2. 对文件内容进行摘要计算,证明它们是相同的(它们也与 中现有的相同%SystemRoot%\INF

以供参考

作为参考,我给出了 SHA-2 和 SHA-1 netathrx.inf

77dde20a2eed36696f2f5e036a838ff0fbc45dec33ad7647c789397c96553240  netathrx.inf
5a57d3a77021e14bec535dbe2d05ee734ec36dd0  netathrx.inf

在验证了这些事情之后,解决这个紧急问题的途径似乎很清晰(尽管我当时并不知道这个问题背后是否隐藏着更大的问题)。

由于 ACL 的限制,%SystemRoot%\System32\DriverStore\FileRepository我选择“滥用”执行程序模拟SYSTEM(又名 LocalSystem)。这可以通过在提升的提示符下执行psexec -sid %COMSPEC%(甚至psexec -sid cmd.exe)来完成。

这样,我现在就可以(当前工作目录是%SystemRoot%)为丢失的 INF 文件创建目录:

md System32\DriverStore\FileRepository\netathrx.inf_amd64_220db23f5419ea8d 

之后我只是将文件硬链接到位:

mklink /h System32\DriverStore\FileRepository\netathrx.inf_amd64_220db23f5419ea8d\netathrx.inf INF\netathrx.inf

无需重新启动,我就可以再次尝试安装所述累积更新,然后重新启动以查看是否成功。

而这次它确实成功了。

希望这个详细的描述能帮助其他人解决类似的问题。不幸的是,这是一个高度手动的过程,我很惊讶地看到dism /online /cleanup-image /checkhealthdism /online /cleanup-image /scanhealthdism /online /cleanup-image /restorehealth没有报告或修复这个问题。

笔记:请注意,install.wim文件夹内netathrx.inf_amd64_220db23f5419ea8d包含的文件不仅仅是 INF。我怀疑在其他情况下复制(或如果它们存在于其他地方则进行硬链接)文件是有意义的。

答案2

我(和一些其他上个月,有 100 人遇到了同样的问题。用户界面抛出的错误只是一条非常平淡的消息:“某些更新文件丢失或存在问题。我们稍后会尝试再次下载更新。”

我很震惊,没有实际的方法来修复驱动程序存储,但无论如何,我用以下方法修复了这个问题执行程序

psexec -i -d -s xcopy %WINDIR%\WinSxS\amd64_dual_netathrx.inf_31bf3856ad364e35_10.0.19041.1_none_aca2c01a764c25fb\ %WINDIR%\System32\DriverStore\FileRepository\netathrx.inf_amd64_220db23f5419ea8d\

相关内容