关键词:Codex、Microsoft Store、WinGet、0x80080005、BITS、wuauserv、WOW64、qmgr.dll、Windows Update
结论
这次问题不是 Codex 安装包本身损坏,也不是简单的 Microsoft Store 缓存问题。
根因是 Windows 更新相关服务的注册表项里多了异常的WOW64=0x14c值,导致这些服务被服务控制管理器以 32 位方式启动:
BITSwuauservUsoSvcWaaSMedicSvc
其中BITS被拉起时走到了:
C:\Windows\SysWOW64\svchost.exe然后尝试加载:
C:\Windows\SysWOW64\qmgr.dll但该文件不存在,于是服务启动失败,系统日志里表现为:
The specified module could not be found.对应到安装 Codex 时,winget/ Microsoft Store 链路最终报:
无法安装或更新 Microsoft Store 程序包。错误代码: 0x80080005删除这些服务注册表里的异常WOW64值,并恢复服务启动方式后,不重启系统也可以恢复安装。
现象
通过 Microsoft Store 源安装 Codex:
winget install--id 9PLM9XGG6VKS--source msstore--accept-package-agreements--accept-source-agreements失败时出现过两类问题。
第一类是 Microsoft Store 账户状态问题:
验证/请求程序包获取失败: 未找到商店帐户这个需要先确认 Microsoft Store 当前用户已登录,或者重新打开商店完成账户状态刷新。
第二类是更新服务链路问题:
无法安装或更新 Microsoft Store 程序包。错误代码: 0x80080005这次真正卡住的是第二类。
排查过程
先确认 Codex 包能被 Microsoft Store 源找到:
winget search codex--source msstore--accept-source-agreements可以看到官方包:
Codex 9PLM9XGG6VKS Publisher: OpenAI升级 WinGet / App Installer 后,安装流程能够进入下载阶段,但仍然失败:
错误代码: 0x80080005继续看系统日志和服务状态,发现BITS和wuauserv不能正常启动:
Get-ServiceBITS,wuauserv,UsoSvc|SelectName,Status,StartType系统日志中有类似错误:
Windows 更新服务因下列错误而停止: The specified module could not be found. Background Intelligent Transfer Service 服务因下列错误而停止: The specified module could not be found.也就是 Windows Update 和 BITS 自己都坏了。Microsoft Store 安装应用依赖这条链路,所以 Store 包安装失败只是结果,不是根因。
进一步用 Process Monitor 抓服务启动过程,发现BITS的svchost.exe来自SysWOW64,并尝试加载SysWOW64\qmgr.dll:
C:\Windows\SysWOW64\svchost.exe C:\Windows\SysWOW64\qmgr.dll NAME NOT FOUND这就解释了为什么服务报 “module could not be found”。正常情况下,BITS 这类系统服务应该走 64 位系统路径,而不是被错误地导到SysWOW64。
再检查服务注册表项,发现这些服务下面存在异常的WOW64值:
HKLM\SYSTEM\CurrentControlSet\Services\BITS HKLM\SYSTEM\CurrentControlSet\Services\wuauserv HKLM\SYSTEM\CurrentControlSet\Services\UsoSvc HKLM\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc这个值导致服务启动架构异常,是本次问题的关键。
修复步骤
以下命令需要在“以管理员身份运行”的 PowerShell 中执行。
1. 先备份相关服务注册表
$stamp=Get-Date-Format'yyyyMMdd-HHmmss'reg export"HKLM\SYSTEM\CurrentControlSet\Services\BITS""$env:USERPROFILE\Desktop\BITS-$stamp.reg"/y reg export"HKLM\SYSTEM\CurrentControlSet\Services\wuauserv""$env:USERPROFILE\Desktop\wuauserv-$stamp.reg"/y reg export"HKLM\SYSTEM\CurrentControlSet\Services\UsoSvc""$env:USERPROFILE\Desktop\UsoSvc-$stamp.reg"/y建议先备份,尤其是生产机、办公机或者被优化工具改过的系统。
2. 删除异常的 WOW64 值
foreach($sin'BITS','wuauserv','UsoSvc','WaaSMedicSvc'){reg delete"HKLM\SYSTEM\CurrentControlSet\Services\$s"/v WOW64/f}如果某一项提示不存在,可以忽略;关键是把这些服务里错误的WOW64配置清掉。
3. 恢复服务启动方式
sc.exe config UsoSvcstart= demandsc.exe config wuauservstart= demandsc.exe config BITSstart= delayed-auto注意sc.exe config的语法里,start=后面需要有空格。
4. 启动服务
Start-ServiceUsoSvc-ErrorAction SilentlyContinueStart-Servicewuauserv-ErrorAction SilentlyContinueStart-ServiceBITS-ErrorAction SilentlyContinue检查状态:
Get-ServiceBITS,wuauserv,UsoSvc|SelectName,Status,StartType修复成功后应类似:
Name Status StartType ---- ------ --------- BITS Running Automatic UsoSvc Running Manual wuauserv Running Manual5. 重新安装 Codex
winget install--id 9PLM9XGG6VKS--source msstore--accept-package-agreements--accept-source-agreements成功结果:
已成功安装为什么常规修复不一定有效
这次排障过程中尝试过一些常规方案:
DISM /Online /Cleanup-Image /RestoreHealthsfc /scannow- 重置 Microsoft Store
- 重置
SoftwareDistribution - 重置
catroot2 - 重新注册部分更新相关 DLL
- 重新安装 / 升级 App Installer 和 WinGet
这些操作对普通商店缓存、系统文件损坏、WinGet 版本过旧有帮助,但如果服务注册表里存在错误的WOW64值,服务仍然会用错误架构启动,最后还是找不到模块。
所以本例的关键不是“再重置一次 Store”,而是让BITS、wuauserv、UsoSvc回到正确的服务启动方式。
注意事项
- 不建议一上来就删注册表。先看服务日志和服务状态,确认
BITS/wuauserv是否真的报 “The specified module could not be found”。 - 删除
WOW64前先导出备份,至少备份BITS、wuauserv、UsoSvc。 - 如果系统曾经运行过精简、优化、禁用更新、隐私增强、服务管理类工具,要留意它们是否会再次写回异常配置。
- 如果
winget版本很旧,也建议先升级 App Installer;但本例里升级 WinGet 不是最终根因,只是让后续错误暴露得更清楚。 - 如果提示“未找到商店帐户”,那是另一层问题,需要先登录或刷新 Microsoft Store 账户状态。
一句话总结
Codex 通过 Microsoft Store 安装失败,表面是winget报0x80080005,实际是 Windows Update / BITS 服务被错误的WOW64注册表值带偏到 32 位SysWOW64路径,导致服务 DLL 找不到。备份注册表后删除异常WOW64值,恢复并启动相关服务,即可不重启完成修复。
补充:多台机器出现类似现象
如果多台机器都能复现BITS/wuauserv启动异常,并且都能查到相同的WOW64配置项,那就不太像单机偶发故障,更像是某种统一环境配置带来的结果。
可能的来源包括:
- 系统镜像中已经带入了异常注册表项
- 某些系统优化、精简、禁用更新脚本改过服务配置
- 统一运维工具下发过相关注册表配置
- 第三方安全或终端管控软件调整过 Windows Update / BITS 服务
可以先用下面命令做只读检查:
foreach($sin'BITS','wuauserv','UsoSvc','WaaSMedicSvc'){reg query"HKLM\SYSTEM\CurrentControlSet\Services\$s"/v WOW64}如果多台机器都能看到类似: WOW64 REG_DWORD 0x14c 那它可以作为一个排查方向:问题可能不是 Codex 或 Microsoft Store 单独异常,而是 Windows Update/BITS 相关服务配置被改动过。具体来源还需要结合装机方式、系统优化脚本、终端管理软件等再确认。