Windows 更新下载失败、安装卡住或重启后回滚的定位与修复。
Windows Update 可能在三个阶段失败:下载阶段报网络或代理错误(如 0x8024401c、0x8024402c),安装阶段报组件或权限错误(如 0x800f081f、0x80070002、0x80070005、0x80073712),重启阶段则进入“正在撤销更改”并回滚。也可能更新进度长时间停在某个百分比,设置页一直提示“需要重启”,或者同一个补丁反复安装失败。
先分清失败阶段很重要:下载失败优先查网络、代理和更新缓存;安装失败优先查磁盘空间、组件存储和权限;回滚则必须看 CBS 与 Windows Update 日志,单纯反复点“重试”通常没有帮助。更新失败还可能与时间不同步、系统盘被第三方备份软件占用、或机器长期未安装服务堆栈更新有关,这些线索都能在日志里找到。
Get-PSDrive C | Select-Object Used,Free
Get-Service wuauserv,bits,cryptsvc,trustedinstaller | Format-Table Name,Status,StartType
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10
Get-WinEvent -LogName 'Microsoft-Windows-WindowsUpdateClient/Operational' -MaxEvents 30 |
Format-Table TimeCreated,Id,LevelDisplayName,Message -Wrap
Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'
Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired'
检查组件存储与系统文件,两条命令都要管理员权限,scanhealth 只扫描不修复:
dism /online /cleanup-image /scanhealth
sfc /scannow
生成可读的更新日志并查看 CBS 尾部错误:
Get-WindowsUpdateLog -LogPath $env:TEMP\WindowsUpdate.log
Select-String -Path C:\Windows\Logs\CBS\CBS.log -Pattern 'error|failed|0x' | Select-Object -Last 30
如果机器受 WSUS、组策略或代理管理,再确认配置来源,避免在客户端盲目改设置:
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate' -ErrorAction SilentlyContinue
netsh winhttp show proxy
看日志时抓“第一个错误”而不是最后一行:CBS 日志里的 0x 错误码、失败组件名和对应的 KB 编号是后续搜索的依据。scanhealth 和 sfc /scannow 只给出基线,扫描通过不代表更新缓存、代理或账户权限没有问题。
0x80070070。0x800f081f、0x80073712。SoftwareDistribution 或 catroot2 中的残留与当前补丁冲突。先释放空间并确认没有挂起重启。系统盘建议保留二十 GB 以上的可用空间;更新期间用“重启”而不是“关机再开机”,以免快速启动保留旧状态。
若更新服务被策略禁用,先确认启动类型;由组策略统一管理的机器不要直接改注册表,应回到 WSUS 或域策略源头处理。
组件存储损坏时,顺序是先 DISM 再 SFC:
dism /online /cleanup-image /restorehealth
sfc /scannow
/restorehealth 默认从 Windows Update 取源。断网或代理受限导致 0x800f081f 时,挂载同版本、同语言的 ISO,指定 install.wim 作为源,并加 /limitaccess 防止再次联网:
dism /online /cleanup-image /restorehealth /source:E:\Sources\install.wim /limitaccess
缓存损坏时,停止服务后重命名目录,保留备份而不是直接删除:
Stop-Service wuauserv,bits,cryptsvc -Force
Rename-Item C:\Windows\SoftwareDistribution SoftwareDistribution.bak -ErrorAction SilentlyContinue
Rename-Item C:\Windows\System32\catroot2 catroot2.bak -ErrorAction SilentlyContinue
Start-Service cryptsvc,bits,wuauserv
随后回到设置页重新检查更新。缓存重置只解决下载层问题;若 CBS 仍报组件损坏,重复执行 restorehealth 意义不大,应更换匹配的修复源,并用 chkdsk 检查磁盘健康。若仍失败,查看 C:\Windows\Logs\CBS\CBS.log、C:\Windows\Logs\DISM\dism.log 和 WindowsUpdate.log 中的首个错误,而不是最后一行。需要手动安装时,从 Microsoft Update Catalog 下载与系统架构匹配的累积更新;若更新说明要求先装服务堆栈更新,应按顺序安装。
反复回滚时不要继续强行断电。先确认磁盘空间和日志,再考虑进入恢复环境卸载最近的更新或使用系统还原:
shutdown /r /o /t 0
该命令会立即重启进入高级启动菜单,执行前保存工作。恢复环境中的“卸载更新”和系统还原都可能移除近期补丁,操作前记录更新历史。如果更新与特定驱动或软件冲突,先卸载冲突项再重试,并保留 KB 编号以便查官方已知问题。临时关闭第三方杀毒或磁盘加密保护前,应先查厂商文档,不要为了排障长期削弱防护。
成功安装后,用 Get-HotFix 和设置页的更新历史核对补丁号,再观察一次重启是否正常。不要手工删除 WinSxS 目录,也不要在生产机上随意执行 dism /online /cleanup-image /startcomponentcleanup /resetbase;后者会让已安装更新无法卸载,且不可逆。
合上页面,先回答,再展开对照。
0x800f081f,DISM 修复也失败,下一步应重点检查什么?0x800f081f 常表示组件存储缺少源文件,需要挂载同版本、同语言 ISO,用 install.wim 指定 /source 并加 /limitaccess;同时确认磁盘空间和补丁是否要求先装服务堆栈更新。wuauserv、bits、cryptsvc 会锁住缓存文件,直接删除可能失败或留下损坏状态。停止服务后重命名可保留现场,必要时还能回退。
小程序版
微信扫码,随时查命令