最近在 VibeCoding 一个小工具,遇到了好几次 Windows下 Codex Cli 更新失败的问题,每次都要花不少时间解决。

这次特地把问题搞清楚了,做个记录。

问题现象

Codex Cli 有版本更新,使用 Powershell 命令进行更新。

powershell -NoProfile -ExecutionPolicy Bypass -Command '$env:CODEX_NON_INTERACTIVE=1; irm https://chatgpt.com/codex/install.ps1 | iex'

执行最后报错。

==> Updating Codex CLI from 0.144.6 to 0.146.0
==> Detected platform: Windows (x64)
==> Resolved version: 0.146.0
==> Downloading Codex CLI
Move-Item : Access to the path 'C:\Users\liudon\.codex\packages\standalone\releases\.staging.0.146.0-x86_64-pc-windows-msvc.14684' is denied.
At line:1006 char:13
+             Move-Item -LiteralPath $stagingDir -Destination $releaseD ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\Users\liudon...dows-msvc.14684:DirectoryInfo) [Move-Item], IOException
    + FullyQualifiedErrorId : MoveDirectoryItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand

问题原因

看到 denied 这个错误,首先想到的是权限问题。

但我是用的管理员启动的 Powershell 终端,理论上不应该有这个问题。

经过跟 ChatGPT 一番沟通定位,最终确认是杀毒软件的防护导致的。

我本机安装了腾讯电脑管家,关闭防护后再进行更新就ok了。

# 先清理遗留文件
$releases = "$env:USERPROFILE\.codex\packages\standalone\releases"
>>
>> Get-ChildItem $releases -Force -Directory -Filter ".staging.*" |
>>     Remove-Item -Recurse -Force

# 重新进行更新
powershell -NoProfile -ExecutionPolicy Bypass -Command `
>>   '$env:CODEX_NON_INTERACTIVE=1; irm https://chatgpt.com/codex/install.ps1 | iex'
==> Updating Codex CLI from 0.144.6 to 0.146.0
==> Detected platform: Windows (x64)
==> Resolved version: 0.146.0
==> Downloading Codex CLI
==> C:\Users\liudon\AppData\Local\Programs\OpenAI\Codex\bin is already on PATH.
==> Current PowerShell session: codex
==> Future PowerShell windows: open a new PowerShell window and run: codex
Codex CLI 0.146.0 installed successfully.