作者:棋玉
注:修改操作前,请先执行快照作为备份!!!
1.使用自动修复工具先修复看一下:
https://support.microsoft.com/zh-cn/help/4027322/windows-update-troubleshooter
2.运行如下命令行,手动重置windows update:
net stop cryptsvc
net stop BITS
net stop WUAUSERV
Ren %systemroot%\SoftwareDistribution SoftwareDistribution.bak
Ren %systemroot%\system32\catroot2 catroot2.bak
net start cryptsvc
net start BITS
net start WUAUSERV
3.2008/2008R2
机器,参考如下步骤:
(1). 运行System File Checker utility (SFC.exe)
右击cmd, 选择以管理员身份运行,运行以下命令行sfc /scannow
(2). 运行checksur
a.点击以下链接:
https://support.microsoft.com/zh-cn/kb/947821
b.根据系统版本(是X86 还是X64 )选择下载对应的程序包。
c.下载后,安装补丁(注:这个补丁和常规意义的补丁并不一样,这个补丁是用来检测更新的库是否正常并尝试修复的一个工具)。
(3)安装3177467(仅适用2008R2 系统)
https://support.microsoft.com/zh-cn/help/3177467/servicing-stack-update-for-windows-7-sp1-and-windows-server-2008-r2-sp
2012/2016
机器,参考如下步骤:
(1). 运行System File Checker utility (SFC.exe)
右击cmd, 选择以管理员身份运行,运行以下命令行sfc /scannow
(2). 完成后在执行以下命令:
DISM.exe /Online /Cleanup-image /Scanhealth
DISM.exe /Online /Cleanup-image /Restorehealth
4.卸载三方安全类软件比如360,安全狗(注:将进程停止是不行的,因为驱动和组件已经加载在内核里,需要卸载并重启服务器)
5.还是有问题的话,需要查看日志
"C:\Windows\Logs\CBS\CBS.log"
"C:\Windows\WindowsUpdate.log"
建议查看日志的技巧:
1.根本kb号或者错误代码搜索,找到这一行(这一行就是补丁安装的结束位置):
WER: Generating failure report for package: Package_for_KB.....
2.查看靠近这行之前的报错(这些报错才是补丁失败的真正原因)尤其是第一个报错,以下示例,补丁安装的直接原因是Failed call to CryptCATAdminAddCatalog. [HRESULT = 0x8000ffff - Unknown Error]
3.这个报错是跟Cryptographic Services 和 catroot2 有关,查看C:\Windows\System32\catroot2\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
缺失catdb 文件,可以从相同版本正常机器尝试拷贝文件测试。
对于在重启过程发生补丁回滚的,分析日志要以rollback 为关键字(如下示例,这行表示补丁配置失败了,开始rollback 即回滚)
之后查看最靠近这行的报错,是在执行C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe
的时候报错了。
这个案例中,查看C:\Windows\Microsoft.NET\Framework64\v4.0.30319
缺失了ngen.exe,同时该目录下还缺失了很多其他文件,建议相同版本正常机器尝试拷贝文件测试或者重置系统。
注:如果是多个补丁安装失败的情况,建议只选择一个补丁进行安装,针对这个补丁先看一下具体的报错