问题发现
这几天在更新 Windows 系统时,发现 WSL 子系统的内核更新一直失败
起初以为只是常见的 Windows 更新推送问题,便没有过多理会
但过了很长一段时间,错误依然反复出现,并错误代码是0x80070661
查阅资料后了解到,该错误通常出现在 WSL 更新安装失败 或 在不兼容架构的系统上安装旧版/异构安装包 时
使用wsl --update --web-download尝试通过网络更新最新的 WSL 子系统
但是提示本机 WSL 已经是最新版本,这意味着 Windows 更新的内容是存在问题的
随后使用wsl -v -l获取 WSL 子系统的详细信息
发现本地已安装的 WSL 内核版本比 Windows 更新推送的版本整整高出一个大版本
我的 WSL 是直接从 GitHub 的 WSL 仓库下载安装的,因为其更新速度快,所以当前系统的内核版本较新
但是 Windows 官方更新渠道推送速度慢,且针对旧系统的更新策略相对保守,因此尝试安装当前系统支持的最高版本内核时发生错误,最终导致版本冲突、架构校验不通过,触发 0x80070661 错误
解决方法
这个错误的本质,是微软对老旧 Windows 系统的适配与更新策略缺陷
并且本地使用的已经是最新的 WSL 子系统的内核,所以不需要再依赖 Windows 系统更新来检测维护 WSL 版本
所以可以通过屏蔽这条异常的 WSL 更新推送,就能彻底解决无休止的 0x80070661 报错
使用到的工具是微软发布的wushowhide.diagcab,下载地址是wushowhide.diagcab
使用方法:打开工具点击下一步,等待完成更新扫描,点击Hide updates将列出当前尚未安装的更新,勾选需要隐藏的更新windows subsystem for linux update - 版本号,再次点击下一步就可以隐藏这个更新了
返回 Windows 更新检查更新,就会发现 WSL 子系统内核更新的提示已经不在了
非商业用途可以使用,但必须注明出处;
若有改编需采用相同许可协议发布。