📅 时间: 2026-07-15
🌤️ 天气: 银川
山重水复疑无路,柳暗花明又一村。
— 陆游 · 《游山西村》
ChatGPT Windows 提示「Windows 安装未完成」
适用环境:Windows 11 + Microsoft Store 版 ChatGPT / OpenAI.Codex 桌面端

问题现象
安装并启动 ChatGPT Windows 客户端后,界面一直停在:
- 完成 Windows 设置
- ChatGPT 需要一次性权限才能在你的电脑上运行
- Windows 安装未完成
点「重试 Windows 设置」「继续受限访问」都没反应。
管理员运行、UAC 允许、卸载重装、Reset-AppxPackage、重启电脑——全无效。
一开始怀疑什么
界面写着 Windows setup incomplete,本能会怀疑:
- UAC / 管理员权限
- Microsoft Store / AppX 安装损坏
- Windows App Runtime
- 相关服务(AppXSvc、ClipSVC 等)
于是先把「系统侧」排了一遍。
排查:系统侧其实都正常
1. 包已经装好
Get-AppxPackage -Name OpenAI.Codex结果大致是:
- 包名:
OpenAI.Codex(不是OpenAI.ChatGPT) Status : Ok- 安装目录在
C:\Program Files\WindowsApps\OpenAI.Codex_...
说明:Store 安装、AppX 注册本身没坏。
2. 进程其实已经起来
Get-Process | Where-Object { $_.ProcessName -match "ChatGPT|Codex|OpenAI" }能看到 codex.exe 在跑。
所以不是「EXE 根本起不来」,而是起了但内部初始化没走完。
3. AppModel 日志也干净
Microsoft-Windows-AppModel-Runtime/Admin 里是:
- Create AppContainer Success
- LaunchProcess Success
- FinishPackageActivation Success
没有 Access Denied / Package Error。
结论:Windows 已经把应用激活成功了,锅不在 Windows。
真正突破口:客户端自己的日志
日志在:
%LOCALAPPDATA%\Packages\OpenAI.Codex_*\LocalCache\Local\Codex\Logs用户配置在:
%USERPROFILE%\.codex\config.toml注意:卸载 Store 应用不会删 ~\.codex。
所以「重装永远没用」——新装完还是读旧配置。
我这边实际踩到的配置错误
网上常见说法是 hooks 格式、duplicate key、UTF-8 BOM 把 notify 读成 锘縩otify。
这些都可能,但我本机日志里最后钉死的是下面两条(按出现顺序):
错误 1:model_catalog_json 不能写相对路径
invalid configuration: AbsolutePathBuf deserialized without a base path
in `model_catalog_json`当时配置类似:
model_catalog_json = "cc-switch-model-catalog.json"新版要求绝对路径,例如:
model_catalog_json = "C:\\Users\\你的用户名\\.codex\\cc-switch-model-catalog.json"不需要自定义模型目录的话,也可以直接删掉 / 注释这一行。
错误 2:不能覆盖内置 provider 名 openai(致命)
修完路径后,日志立刻变成:
model_providers contains reserved built-in provider IDs: `openai`.
Built-in providers cannot be overridden.
Rename your custom provider (for example, `openai-custom`).当时有:
model_provider = "openai"
[model_providers.openai]
base_url = "http://127.0.0.1:20000/v1"
wire_api = "responses"这在旧版或许能用;新版明确禁止用内置 ID openai 当自定义 provider。
改成:
model_provider = "openai-proxy"
[model_providers.openai-proxy]
name = "openai-proxy"
base_url = "http://127.0.0.1:20000/v1"
wire_api = "responses"改完后界面不再卡在「Windows 安装未完成」。
顺带发现的次要问题(不一定致命)
1. MCP / node_repl 指向了过期 runtime 目录
配置里还写着类似:
...\OpenAI\Codex\runtimes\cua_node\789504f803e82e2b\bin\node_repl.exe磁盘上实际只有别的 hash 目录(例如 a89897d3d9baa117)。
路径对不上会导致 browser / computer-use 相关能力异常,建议和现有 runtime 对齐。
2. bundled executable relocation 失败
日志里大量:
bundled_executable_relocation_failed
copyfile ... errno -4094 UNKNOWN应用试图把 WindowsApps 里的 codex.exe / cua_node 拷到:
%LOCALAPPDATA%\OpenAI\Codex\bin
%LOCALAPPDATA%\OpenAI\Codex\runtimes本机还观察到源文件带 Encrypted 属性,复制到用户目录会失败。
这次主因仍是 config 解析失败;若 config 修好后仍异常,可再查:
- C 盘 EFS / 文件夹加密
- 杀软拦截复制
- 清掉
%LOCALAPPDATA%\OpenAI\Codex下的.staging-*再启动
为什么界面会骗你
大致启动链是:
启动程序
→ 读 config.toml
→ 初始化 app-server / MCP / plugins / computer use
→ 完成 Windows Setup 页面任意一步配置解析失败:
config 失败
→ 初始化中断
→ Setup 永远完成不了
→ 界面仍写「Windows 安装未完成」所以文案误导性很强:Windows 早就装完了,是客户端自己的初始化没过。
快速自救清单
遇到同样现象,优先做这几步,别先反复重装:
1. 先看日志里有没有 config 报错
$logRoot = "$env:LOCALAPPDATA\Packages\OpenAI.Codex_2p2nqsd0c76g0\LocalCache\Local\Codex\Logs"
Get-ChildItem $logRoot -Recurse -File |
Sort-Object LastWriteTime -Descending |
Select-Object -First 1 |
ForEach-Object { Select-String -LiteralPath $_.FullName -Pattern "failed to reload|invalid configuration|duplicate key" }2. 临时禁用坏配置(最快验证)
Stop-Process -Name codex -Force -ErrorAction SilentlyContinue
Copy-Item "$env:USERPROFILE\.codex\config.toml" "$env:USERPROFILE\.codex\config.toml.bak-$(Get-Date -Format yyyyMMddHHmmss)"
Rename-Item "$env:USERPROFILE\.codex\config.toml" "config.toml.disabled"再打开 ChatGPT,让它生成干净默认配置。
能进主界面 = 百分百是用户配置问题。
3. 再把自定义项加回去(注意雷区)
model_catalog_json用绝对路径,或不要写- 自定义 provider 不要叫
openai/ 其他内置 ID - MCP 路径指向当前真实存在的 runtime 目录
- 避免 duplicate key、错误编码 / BOM
总结
| 表象 | 真相 |
|---|---|
| Windows 安装未完成 | Windows / AppX 多半已经 OK |
| 重装无效 | ~\.codex 不会随 Store 卸载删除 |
| 真正故障源 | config.toml 与新版不兼容 |
| 本机关键错误 | 相对路径 model_catalog_json + 覆盖内置 openai provider |
一句话:
ChatGPT Windows 卡在「Windows 安装未完成」时,先看 %USERPROFILE%\.codex\config.toml 和 Codex Logs,不要只盯着 Store 和 UAC。
如果你的现象是:重装无效、管理员运行无效、进程其实在跑、日志里一堆 failed to reload config——优先修 / 重建这份配置,通常比继续折腾 AppX 省几个小时。