在我的 PC 台式机系统使用过程中的某个时刻,我在玩视频游戏时连续出现两次蓝屏。之后,我设法通过重新连接所有硬件来阻止系统崩溃,但出于某种原因,影响系统的任何 Windows 更新(例如从 1803 到 1903 的年度升级以及针对 Windows 1803 版本的 .NET Framework 到 4.8 的随机更新)始终无法安装。由于它们不是强制性的,所以我没有理会它们,因为 Windows Defender 的常规安全更新仍然有效。在某个时候,我运行了 Windows 更新疑难解答,它说他们发现了一些错误,但重新启动将运行修复程序。
有一次我决定让更新再次运行。更新失败是 .NET 更新的 0x8000ffff 和 Windows 升级的 0x800700C12。
在网上搜索它们,你会发现一堆垃圾,因为我们都知道,所有 Windows 错误都是让易受攻击的人安装恶意软件的最佳场所。
下载 MediaCreationTool 并告诉它手动升级到 1903 也失败了,并出现“严重错误”,尽管它似乎没有影响系统,只是没有应用任何更改。但没有日志(感谢微软提供这些有用的错误消息)
通过 powershell 命令 GetWindowsUpdateLog 转储 Windows 更新日志,我发现... 没什么用。阅读这些错误日志既乏味又复杂,错误和失败之间的区别以及在正常运行期间你从未听说过的系统(至少在 Linux 中,你知道在设置系统时使用和安装的系统)并没有帮助。
然后,我尝试手动安装 .NET 4.8 Framework。使用常规安装程序也失败了,但至少它在我的驱动器的某个随机位置转储了一个可搜索的 .xml(出于某种原因,它将安装文件转储到我速度较慢的 2TB 存储硬盘中,而不是系统安装所在的 SSD 上的某个位置。但是嘿!Windows 和临时文件!如果临时文件从未清理过,会有什么问题?)。因此,我注意到在安装的最后步骤中执行的某些命令行程序失败了,并返回了相同的 0x8000ffff 错误代码:wusa.exe
比较错误消息至少这是安装过程中常见的错误:完成部分失败。
在研究修复 Windows 更新的方法时,我发现尝试使用以下建议:
sfc /scannow
和
dism.exe /online /cleanup-image /restorehealth
sfc 失败,提示仍有系统更改待处理,我应该重新启动 PC。过去 6 个月我每天都这样做,所以这不是解决办法。
dism.exe 在 82.6% 左右失败,至少提示我有日志可以查看。尽管它们的格式也不是很有帮助,但它在某些最终步骤中也失败了。
在研究如何让 sfc 重新工作时,我发现一个随机论坛帖子告诉用户删除 WinSxS 目录中的未决文件。查看该目录(无论其用途如何),我发现了未决文件 - 大小接近 300MB。似乎有些不对劲。
以管理员身份删除文件不起作用。我一直收到拒绝访问错误。即使下载 PSTools 并以 SYSTEM 用户身份打开 power shell,我也无权删除它。没有进程持有该文件的句柄。
我该如何修复这个混乱局面以及所有这些错误是如何关联的?
答案1
事实证明,整个事情似乎都是一团乱麻。
我在玩视频游戏时遇到蓝屏(这是我大约 10 年来第一次遇到),似乎是在 Windows 更新在后台安装某些东西时发生的。我不知道更新本身是否是导致蓝屏的原因,但我不得不费尽周折才能使系统再次运行,因为它报告启动脚本已损坏。当时我猜是从故障排除高级启动菜单中运行了一些基本的命令行工具来修复启动问题。然后我重新连接了所有东西,因为错误日志告诉我在将东西写入磁盘时发生了一些奇怪的事情,所以我认为由于某种原因,系统运行时与系统 SSD 的线路连接被切断了。修复后,系统再次顺利运行,但更新不再起作用。
事实证明,“文件损坏”问题更加严重。似乎在未决的.xml 中存在一个应在 PC 重启时应用的更新列表。但是,该 .xml 文件不知何故被破坏了,不允许 Windows 成功读取其内容,但仍允许它将所有它认为应该应用的更新添加到损坏的文件中,从而从文件中读取任意数量的数据,然后在每次重启时将所有这些数据附加到文件后面,使其膨胀到几乎 GB 大小的待处理更新元数据。
由于 Windows 升级和 .NET 安装程序也希望在完成步骤期间告诉系统“下次重新启动设备时需要执行某些操作”,即使是独立安装程序和使用媒体创建工具的手动升级,它们也无法正确解析和添加到待处理.xml 中。由于这一切都被破坏了,ComponentBasedServicing 似乎对某些程序负有责任,因此 CBS 会不时出现在错误日志文件中。
现在来看看解决方案:
首先,我必须从使用媒体创建工具设置的 USB 记忆棒启动到故障排除模式。
我在那里启动了一个命令行并手动删除了 WinSxS 目录中的 peng.xml。
之后,我能够运行并sfc /scannow
最终获得一份报告,报告称一些文件已损坏并且有些内容已修复,但不是全部。
此后,我能够运行,dism /online /cleanup-image /restorehealth
但无法找到要清理的源。
之后,我可以运行来dism /online /cleanup-image /startcomponentcleanup
清理组件服务
此后,我又成功跑完了另一趟/restorehalth
。
之后,我可以重置 Windows 更新缓存并重新下载所有待处理的更新和升级。
之后,我能够安装 1903 升级以及 .NET Framework 更新。
现在一切看上去都很好。
我希望 Windows 能够为用户(而不仅仅是超级用户)提供更清晰的信息,让其知道系统在出现任何问题时什么地方出现了问题,什么地方没有出现问题。
这次搜查简直是地狱。但我成功逃脱了。