Codex Windows Sandbox 启动失败:CreateProcessAsUserW failed: 2 的原因与修复
一、问题背景
在 Windows 上使用 Codex CLI / Codex Desktop 时,我遇到了两个看起来相关、但实际属于不同层级的问题。
最开始执行:
codex sandbox windows cmd /c echo test
报错:
windows sandbox failed: runner error: CreateProcessAsUserW failed: 2
后来在让 Codex 往文件里写内容时,又弹出 Windows 错误窗口,路径类似:
C:\Program Files\WindowsApps\OpenAI.Codex_...\app\resources\codex-windows-sandbox-setup.exe
错误内容:
找不到指定的模块。
一开始我以为是 Codex sandbox 本身坏了,但完整排查后发现,这是两个不同问题:
- 第一个问题是 Codex CLI 新版本的 sandbox 命令格式变了。
- 第二个问题是 Windows 原生 sandbox 的
elevated模式在本机 setup 阶段失败。
二、环境信息
当前 Codex 版本:
codex --version
输出:
codex-cli 0.142.5
当前机器上实际存在两套 Codex 来源:
C:\Users\Amber\AppData\Roaming\npm\...
C:\Program Files\WindowsApps\OpenAI.Codex_...\app\resources\...
其中 npm 版 Codex CLI 路径大致是:
C:\Users\Amber\AppData\Roaming\npm\node_modules\@openai\codex
Codex Desktop 自带资源路径大致是:
C:\Program Files\WindowsApps\OpenAI.Codex_...\app\resources
三、第一个问题:codex sandbox windows 已经不是新版写法
原命令:
codex sandbox windows cmd /c echo test
报错:
windows sandbox failed: runner error: CreateProcessAsUserW failed: 2
查看新版帮助:
codex sandbox --help
可以看到当前版本的格式是:
Usage: codex sandbox [OPTIONS] [COMMAND]...
也就是说,sandbox 后面直接跟要执行的命令。
新版正确写法是:
codex sandbox cmd /c echo test
输出:
test
根因
在 Codex CLI 0.142.5 中,windows 已经不是 sandbox 的子命令。
所以这条旧命令:
codex sandbox windows cmd /c echo test
会被新版 CLI 理解成:
在 sandbox 里运行一个叫 windows 的程序,并传入 cmd /c echo test
但 Windows 上没有名为 windows 的可执行文件,于是底层 CreateProcessAsUserW 返回错误码 2,也就是文件找不到。
解决方式
推荐直接改用新版写法:
codex sandbox cmd /c echo test
如果仍想兼容旧写法,可以在 npm 版入口脚本中做兼容处理,把:
codex sandbox windows ...
自动转换为:
codex sandbox ...
我当时修改的位置是:
C:\Users\Amber\AppData\Roaming\npm\node_modules\@openai\codex\bin\codex.js
加入的逻辑大致如下:
const childArgs = process.argv.slice(2);
if (
process.platform === "win32" &&
childArgs[0] === "sandbox" &&
childArgs[1] === "windows"
) {
childArgs.splice(1, 1);
}
const child = spawn(binaryPath, childArgs, {
stdio: "inherit",
env,
});
这一步解决的是旧命令格式兼容问题。
但是,它并没有解决后面那个“找不到指定模块”的弹窗。
四、第二个问题:写文件时 codex-windows-sandbox-setup.exe 报错
后面在让 Codex 往 workspace 文件里写内容时,又出现了新的错误窗口:
C:\Program Files\WindowsApps\OpenAI.Codex_...\app\resources\codex-windows-sandbox-setup.exe
找不到指定的模块。
这个问题和 codex sandbox windows 的命令格式无关。
这里出问题的是 Codex Desktop 自带的 Windows sandbox setup 程序。
五、进一步排查
先验证基础 sandbox 是否能运行:
codex sandbox cmd /c echo test
结果:
test
说明 sandbox 基础命令执行能力是正常的。
再测试 workspace 写入:
codex sandbox -c 'sandbox_mode="workspace-write"' cmd /d /c "echo final-write-ok>codex_final_write_test.txt"
然后读取文件:
Get-Content .\codex_final_write_test.txt
结果:
final-write-ok
说明在正确的 workspace-write 配置下,sandbox 也能正常写文件。
也就是说,真正的问题集中在 Windows sandbox 的 setup 模式上。
六、elevated 和 unelevated 的区别
Codex Windows 原生 sandbox 支持两种模式:
[windows]
sandbox = "elevated" # or "unelevated"
elevated
elevated 是官方推荐的首选模式。
它会使用:
专门的低权限 sandbox 用户
文件系统 ACL 边界
防火墙规则
本地安全策略调整
优点是隔离更完整、安全边界更强。
但缺点是它需要运行:
codex-windows-sandbox-setup.exe
来做系统级准备。
如果 WindowsApps 权限、MSIX 包隔离、管理员权限、本地安全策略、企业安全软件或系统依赖有问题,就可能在 setup 阶段报错。
我这里看到的弹窗就是这一类问题。
unelevated
unelevated 是 fallback 模式。
它不会走完整的 elevated setup,而是基于当前用户派生一个受限 Windows token,并用 ACL 做文件访问限制。
优点是兼容性更好,更容易启动。
缺点是隔离强度弱于 elevated,尤其是防火墙和专用低权限用户这部分不如 elevated 完整。
简单理解:
elevated = 更安全、更完整,但更依赖系统 setup
unelevated = 兼容性更好,隔离稍弱,但仍然是 sandbox
七、最终解决方案
由于本机 elevated 模式会触发 Codex Desktop 包路径里的 setup 程序错误,所以我把 Codex 配置改成了 unelevated。
配置文件位置:
C:\Users\Amber\.codex\config.toml
修改前:
[windows]
sandbox = "elevated"
修改后:
[windows]
sandbox = "unelevated"
这不是关闭 sandbox,而是切换到 Windows 原生 sandbox 的备用实现。
八、验证结果
修改后验证基础命令:
codex sandbox cmd /c echo test
输出:
test
验证旧写法兼容:
codex sandbox windows cmd /c echo test
输出:
test
验证 workspace 写入:
codex sandbox -c 'sandbox_mode="workspace-write"' cmd /d /c "echo final-write-ok>codex_final_write_test.txt"
读取结果:
final-write-ok
运行诊断:
codex doctor --summary
结果:
17 ok · 1 idle · 1 notes · 0 warn · 0 fail ok
九、最终结论
这次问题不能只归结为“sandbox 坏了”。
完整结论是:
1. codex sandbox windows cmd /c echo test 报错,是因为新版 Codex CLI 不再需要 windows 子命令。
2. 写文件时弹出 codex-windows-sandbox-setup.exe 找不到模块,是 elevated Windows sandbox setup 阶段的问题。
3. sandbox 本身可以运行,workspace-write 模式也可以正常写文件。
4. 当前机器上更稳定的解决方式是把 Windows sandbox 从 elevated 切到 unelevated。
最终推荐配置:
[windows]
sandbox = "unelevated"
等以后 Codex Desktop 或本机 WindowsApps / setup 权限问题修复后,可以再切回:
[windows]
sandbox = "elevated"
十、补充说明
如果只是手动测试 sandbox 命令,建议使用新版格式:
codex sandbox cmd /c echo test
如果要测试写入,需要显式使用 workspace-write:
codex sandbox -c 'sandbox_mode="workspace-write"' cmd /d /c "echo test>test.txt"
不要用旧格式:
codex sandbox windows cmd /c echo test
除非你自己做了兼容处理。
更多推荐

所有评论(0)