从大概 8 月份开始,公司配发的电脑(Windows 7 系统)就总是提示有更新,但每次更新都安装失败。不断提示更新很打扰工作思路,于是下决心解决。
经检查,问题出在 KB4512506/KB4516065(Windows 7 月安全质量汇总更新)上,尝试安装该更新时,系统会提示 0x80092004
错误。上网检查后确认,该错误代码与 CRYPT_E_NOT_FOUND
有关。也就是说,Windows Update 发现更新文件的散列值不匹配,于是拒绝安装。
进一步检查发现,微软在给 Windows 7 和 Windows Server 2008 R2 的更新中修改了散列值签名方式,而 19 年 8 月发布的 7 月安全质量汇总更新,正是新签名方式第一次生效的时候。具体来说,原先会使用 SHA-1 和 SHA-2 同时签名;但因为众所周知的安全问题,微软放弃了 SHA-1 签名转而仅使用 SHA-2 签名。但如果 Windows 7 上的 Windows Update 依旧检查 SHA-1 签名,则会发现更新文件的散列值不匹配,于是拒绝安装,并报错 0x80092004
。
为解决这一问题,微软先期发布了两个相关更新:
安装 KB4512506 前,系统必须安装好这两个前置依赖,否则就会因签名问题报错 0x80092004
。
经检查,我的系统里安装了 KB4474419,但是没有安装 KB4490628。那么这就是导致问题的直接原因了。
那么根本原因在哪里呢?答案是:公司电脑的组策略配置决定了 Windows Update 由公司 IT 管理员来管理。公司 IT 可能没有正确配置安装 KB4490628,于是有后续问题。更加无奈的是,因为组策略配置的限制,我无法在 Windows Update 中搜索安装 KB4490628。幸运的是,我在微软 Update Catalog 当中找到了 KB4490628 的独立安装包。下载安装 KB4490628 的过程一切顺利。
安装完 KB4490628 之后,再次打开 Windows Update,尝试安装 KB4516065 则一切顺利。