本文记录一次在 Windows 环境中使用 Codex 桌面 App 时遇到的 CLI 定位问题,以及对应的排查和解决过程。适用于类似下面几类报错:

Unable to locate the Codex CLI binary. Set CODEX_CLI_PATH or ensure the Electron resources include bin/codex.

或者在安装了 WSL 后出现:

(code=2, signal=null).
Most recent error: /mnt/c/Users/dell/AppData/Roaming/npm/codex.cmd: line 10: syntax error near unexpected token `('
/mnt/c/Users/dell/AppData/Roaming/npm/codex.cmd: line 10: `IF EXIST "%dp0%\node.exe" (
'

以及进一步可能遇到的:

spawn EINVAL

问题背景

Codex 桌面 App 启动时需要找到本机的 Codex CLI 可执行文件。如果 App 没有在 Electron 资源目录中找到内置的 bin/codex,就会尝试从本机环境中查找 CLI。

在 Windows 上,如果 Codex CLI 是通过 npm 安装的,命令入口通常会出现在:

C:\Users\dell\AppData\Roaming\npm\codex
C:\Users\dell\AppData\Roaming\npm\codex.cmd

可以用下面两个命令确认:

where.exe codex
codex --version

示例输出:

PS C:\Users\dell> where.exe codex
C:\Users\dell\AppData\Roaming\npm\codex
C:\Users\dell\AppData\Roaming\npm\codex.cmd

PS C:\Users\dell> codex --version
codex-cli 0.128.0

如果 where.exe codex 能找到路径,且 codex --version 能正常输出版本号,说明 Windows 本地的 Codex CLI 本身是可用的。

解决一:设置 CODEX_CLI_PATH

如果 Codex 桌面 App 报:

Unable to locate the Codex CLI binary. Set CODEX_CLI_PATH or ensure the Electron resources include bin/codex.

通常说明桌面 App 没有找到 Codex CLI 的实际位置。

这时可以在 Windows 环境变量中新增或修改:

CODEX_CLI_PATH

值设置为 where.exe codex 查到的 Codex 路径,例如:

C:\Users\dell\AppData\Roaming\npm\codex.cmd

或者:

C:\Users\dell\AppData\Roaming\npm\codex

设置完成后,建议完全退出 Codex 桌面 App,然后重新打开,让新的环境变量生效。

解决二:安装了 WSL 时,关闭通过 WSL 运行 Codex

如果你同时安装了 WSL,Codex 桌面 App 可能会尝试在 WSL 中运行 Windows 侧的 npm 命令入口。

这时可能会出现类似报错:

(code=2, signal=null).
Most recent error: /mnt/c/Users/dell/AppData/Roaming/npm/codex.cmd: line 10: syntax error near unexpected token `('
/mnt/c/Users/dell/AppData/Roaming/npm/codex.cmd: line 10: `IF EXIST "%dp0%\node.exe" (
'

这个错误的核心原因是:WSL/Linux shell 正在尝试解析 Windows 的 .cmd 批处理文件,而 .cmd 文件中的语法不是 Linux shell 能识别的。

可以修改 Codex 的全局状态文件:

C:\Users\dell\.codex\.codex-global-state.json

找到下面这个字段:

"runCodexInWindowsSubsystemForLinux": true

将它改为:

"runCodexInWindowsSubsystemForLinux": false

保存后重新启动 Codex 桌面 App。

如果文件中没有这个字段,可以根据 JSON 结构手动添加,但要注意保持 JSON 格式合法。

解决三:npm 安装时改用真正的原生 codex 可执行文件

如果设置 CODEX_CLI_PATH 后仍然出现:

spawn EINVAL

有可能是因为当前指向的是 npm 生成的包装入口,例如:

C:\Users\dell\AppData\Roaming\npm\codex
C:\Users\dell\AppData\Roaming\npm\codex.cmd

这些入口本质上是 npm 的 wrapper,不一定适合被 Codex 桌面 App 直接 spawn。

可以尝试找到 npm 包中真正的 Windows 原生 Codex 可执行文件。常见路径类似:

C:\Users\dell\AppData\Roaming\npm\node_modules\@openai\codex\node_modules\@openai\codex-win32-x64\vendor\x86_64-pc-windows-msvc\codex

然后将 CODEX_CLI_PATH 设置为这个真实的 codex 可执行文件路径。

设置完成后,重新启动 Codex 桌面 App。

推荐排查顺序

  1. 在 PowerShell 中确认 Codex CLI 是否可用:

    where.exe codex
    codex --version
    
  2. 如果桌面 App 报无法定位 CLI,先设置 CODEX_CLI_PATH

  3. 如果安装了 WSL,并且报 .cmd 语法错误,修改:

    C:\Users\dell\.codex\.codex-global-state.json
    

    将:

    "runCodexInWindowsSubsystemForLinux": true
    

    改为:

    "runCodexInWindowsSubsystemForLinux": false
    
  4. 如果继续报 spawn EINVAL,不要再指向 npm wrapper,改为指向 npm 包里的原生 Windows Codex 可执行文件:

    C:\Users\dell\AppData\Roaming\npm\node_modules\@openai\codex\node_modules\@openai\codex-win32-x64\vendor\x86_64-pc-windows-msvc\codex
    
  5. 每次修改环境变量或配置文件后,都要完全退出并重新打开 Codex 桌面 App。

总结

这类问题本质上通常不是 Codex CLI 没安装,而是 Codex 桌面 App 没有找到正确的 CLI 路径,或者在 Windows 与 WSL 混用时选错了运行环境。

可以按下面思路判断:

无法定位 CLI
=> 设置 CODEX_CLI_PATH

WSL 中执行 .cmd 报语法错误
=> 关闭 runCodexInWindowsSubsystemForLinux

spawn EINVAL
=> CODEX_CLI_PATH 不要指向 npm wrapper,改指向真实的原生 codex 可执行文件

参考

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐