一、问题背景在 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\codexCodex 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 CLI0.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_modeworkspace-write cmd /d /c echo final-write-okcodex_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 unelevatedelevatedelevated是官方推荐的首选模式。它会使用专门的低权限 sandbox 用户 文件系统 ACL 边界 防火墙规则 本地安全策略调整优点是隔离更完整、安全边界更强。但缺点是它需要运行codex-windows-sandbox-setup.exe来做系统级准备。如果 WindowsApps 权限、MSIX 包隔离、管理员权限、本地安全策略、企业安全软件或系统依赖有问题就可能在 setup 阶段报错。我这里看到的弹窗就是这一类问题。unelevatedunelevated是 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_modeworkspace-write cmd /d /c echo final-write-okcodex_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-writecodex sandbox -c sandbox_modeworkspace-write cmd /d /c echo testtest.txt不要用旧格式codex sandbox windows cmd /c echo test除非你自己做了兼容处理。