遇到的问题

Windows 版 Codex 可以正常聊天,但无法执行本地命令,并提示:

failed to spawn code-mode host
C:\Users\<用户名>\AppData\Local\OpenAI\Codex\bin\<运行目录>\codex-code-mode-host.exe:
系统找不到指定的文件。 (os error 2)


我这次遇到的原因是:**实际运行目录缺少 codex-code-mode-host.exe,导致执行组件无法启动。**

解决办法


从当前 Codex 桌面应用安装包的 app\resources 中复制 codex-code-mode-host.exe,放到报错所指向的目录,与 codex.exe 放在一起。

可以直接使用下面的脚本:

1. 打开 PowerShell 7。
2. 复制并运行脚本。
3. 按提示粘贴报错里的完整目录路径,去掉最后的 codex-code-mode-host.exe 文件名。
4. 补回文件后,回到 Codex,让它运行 PowerShell 的 Get-Location。如果能正常返回当前目录,就说明本地命令执行已恢复。
5. 清除旧 CLI 路径覆盖。 如果 Windows 用户环境变量 CODEX_CLI_PATH 固定指向旧版本目录,删除该变量,并移除用户 Path 中对应的旧 CLI 目录。随后彻底退出 Codex(包括托盘后台),从开始菜单重新打开,让客户端自动选择与当前安装包配套的 CLI,避免后续升级仍使用旧版本。

脚本内容


脚本会自动查找当前安装包、补回缺失文件并校验 SHA-256;如果目标文件已存在,会停止,不会覆盖。

& {
$ErrorActionPreference = 'Stop'
$repairPackages = @(Get-AppxPackage -Name OpenAI.Codex)
if ($repairPackages.Count -ne 1) {
throw '未找到唯一的 Codex 桌面应用安装包,已停止。'
}

$repairInput = (Read-Host '粘贴报错中的 CLI 目录,不含最后的 exe 文件名').Trim().Trim('"')
if ([string]::IsNullOrWhiteSpace($repairInput)) {
throw '没有填写目标目录,已停止。'
}
if (![System.IO.Path]::IsPathFullyQualified($repairInput)) {
throw '请输入完整的绝对路径,已停止。'
}

$repairDir = [System.IO.Path]::GetFullPath($repairInput).TrimEnd('\', '/')
$repairRoot = [System.IO.Path]::GetFullPath(
(Join-Path $env:LOCALAPPDATA 'OpenAI\Codex\bin')
).TrimEnd('\', '/')
if ((Split-Path -Path $repairDir -Parent) -ine $repairRoot) {
throw '目标必须是当前用户 OpenAI\Codex\bin 下的一个直接子目录,已停止。'
}
if (!(Test-Path -LiteralPath (Join-Path $repairDir 'codex.exe') -PathType Leaf)) {
throw '目标目录中没有 codex.exe,请核对报错路径。'
}

$repairSource = Join-Path $repairPackages[0].InstallLocation 'app\resources\codex-code-mode-host.exe'
$repairTarget = Join-Path $repairDir 'codex-code-mode-host.exe'
if (!(Test-Path -LiteralPath $repairSource -PathType Leaf)) {
throw '当前应用安装包中没有配套组件,已停止。'
}
if (Test-Path -LiteralPath $repairTarget) {
throw '目标组件已经存在,未覆盖;请继续检查实际报错。'
}

$sourceHash = (Get-FileHash -LiteralPath $repairSource -Algorithm SHA256).Hash
[System.IO.File]::Copy($repairSource, $repairTarget, $false)
$targetHash = (Get-FileHash -LiteralPath $repairTarget -Algorithm SHA256).Hash
if ($sourceHash -ne $targetHash) {
throw '复制后的文件校验不一致,请停止并继续检查。'
}

Write-Output '组件已补回,SHA-256 校验通过。请回到 Codex 实际测试命令执行。'
Get-Item -LiteralPath $repairTarget | Select-Object FullName, Length | Format-List
}


然后命令行会显示:“贴报错中的 CLI 目录,不含最后的 exe 文件名:”

这时候把最开始报错的那个路径 C:\Users\<用户名>\AppData\Local\OpenAI\Codex\bin\<运行目录>\ 粘贴上去就好了。

验证是否恢复


看到“组件已补回,SHA-256 校验通过”后,回到 Codex,发送:

请运行 PowerShell 的 Get-Location,验证本地命令是否恢复。


命令能正常返回当前目录,才说明执行恢复。我补回文件后,这一步验证通过,后续也能正常调用 Blender。

本次验证环境为 Codex 桌面版 26.903.8094.0、CLI 0.153.4。这个办法适用于组件文件确实缺失的情况;文件已存在但启动失败,需要另外检查。

Rate this post