最新消息: 预先成其事必先利其器

Windows 更新装了又回滚:一条从便宜到贵的排查链

更新失败不是一门玄学,绝大多数卡在四个环节里某一个:时间与服务、分发缓存、权限与拦截、组件存储。下面这条链按代价从低到高排,前三步十分钟以内能做完,不需要重装系统。

先定位是哪一类失败

你在哪一步失败 常见代码或提示 先怀疑什么
下载阶段一直 0% 0x8024 开头 时间不同步、BITS 服务没跑
装到一半自动回滚 0x80070005、0x80070652 权限被拦、磁盘写入失败、第三方过滤驱动
提示空间不足 需要更多空间 C 盘真满了,或恢复分区占用
同一个补丁装了又卸 列表里反复出现同一个编号 组件存储损坏或该补丁与你机器上的驱动冲突
更新后开不了机 循环准备、黑屏 别再试更新,先进安全模式

看代码不要只看最后五位,前面那截才是提示它死在哪个环节。报错窗口里的“740”“5”这类小数字往往是权限问题,而 0x8024 那一堆基本是下载与服务问题。

第一步:三条命令先看现状

# 一:时间不对会让签名校验全部失败
w32tm /resync

# 二:更新依赖的四个服务是否在跑
Get-Service wuauserv, BITS, CryptSvc, msiserver | Select-Object Name, Status, StartType

# 三:把最近一次的更新日志导到桌面来看
# 需要管理员权限
Get-WindowsUpdateLog

日志导出后在桌面生成一个 etl 文件,用记事本打开搜 fail 或错误码。看不懂没关系,搜到失败那一行前后的文字,拿它去搜关键字比只拿错误码准。

第二步:改分发缓存,这一步成功率最高

下载下来的更新包存在一个分发目录里,一旦其中某个包损坏,系统会反复重试同一个坏文件,表现就是永远装不上。把它改名让系统重新下一遍:

# 需要管理员权限。改完名字不删,确认能更新后再删旧目录
$sd = 'C:\Windows\SoftwareDistribution'
Stop-Service wuauserv, BITS -Force
Move-Item $sd ($sd + '.old')
Start-Service wuauserv, BITS

改完回到设置里重新检查更新,下载会比平时慢,这是正常的,因为它真的在重新下。确认能更新之后,再把那个 .old 目录删掉。

第三步:组件存储自己坏了

上面两步无效,再修系统镜像本身。管理员终端里先跑 DISM /Online /Cleanup-Image /RestoreHealth,跑完再跑 sfc /scannow。两条都要几十分钟,不要中途关窗口。DISM 自己报错,通常还是网络或时间问题,回到第一步重看。

第四步:怀疑第三方拦截,但要正确怀疑

0x80070005 这一类权限错确实常见于安全软件的过滤驱动。做法是把防护临时退出、重试一次;能装上就证明方向对了,然后把它恢复,再去它的信任列表里把更新相关进程加上,而不是把防护一直关着。退一次只能算诊断,不能算解决。

最后一条路,以及什么时候停手

如果四步走完还不行,用官方安装助手做一次保留文件和应用的就地升级,而不是重装。它会把系统组件重建一遍,成功率比继续折腾命令高得多。

情况 建议 为什么
只有某一个补丁反复失败,其他正常 用“显示或隐藏更新”把它藏起来,等下一个版本 单个补丁兼容问题不是你的机器坏了
主力工作机、项目正赶截止 暂停更新七天,别在关键期折腾 排查链任何一步都可能重启
已经进不去桌面 停手,转安全模式或回滚点 此时再跑 DISM 没有意义
公司配发、有域策略的电脑 直接找 IT,不要自己改服务 组策略会把你改的东西改回去

最后一句

更新失败里八成是分发缓存和服务状态这两件事,剩下的才是真的系统损坏。按上面这条链走,花不了多少时间,也不会在没定位之前就把自己坑进去。