卸载 Codex++ 后 Codex 仍显示 custom:恢复官方登录的解决方法

问题背景

之前在 Windows 上使用过 Codex++,用于配置自定义模型或第三方服务。后来卸载 Codex++,准备恢复 Codex 官方登录。

但是卸载完成后,重新打开 Codex,左下角仍然显示:

custom

在这里插入图片描述

界面没有恢复到正常的 ChatGPT 官方账号状态。

这说明 Codex++ 虽然已经被卸载,但它写入的 Codex 配置、认证信息或环境变量仍然存在。Codex 官方应用启动后继续读取这些残留配置,因此仍然显示 custom

最终通过以下方式解决:

关闭 Codex 相关进程,备份 .codex 目录,删除 config.tomlauth.json,并清除自定义服务相关环境变量。


一、问题现象

卸载 Codex++ 后,打开 Codex,左下角仍然显示:

custom

点击后只能看到类似以下选项:

显示宠物
设置

没有正常显示 ChatGPT 官方账号或工作区。

同时,在 PowerShell 中运行:

Get-Command codex -All

可能会提示:

无法将“codex”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

运行:

where.exe codex

也可能提示找不到文件。

不过,这并不是本次问题的关键。

PowerShell 中的 codex 命令对应独立安装的 Codex CLI。没有安装 Codex CLI,并不影响 ChatGPT 桌面应用中集成的 Codex 功能。

本次问题的真正原因,是 .codex 配置和环境变量中仍然保留着 Codex++ 使用过的自定义 Provider 信息。


二、最终有效的解决方案

使用 PowerShell 执行以下脚本:

Get-Process ChatGPT,Codex,CodexPlusPlus -ErrorAction SilentlyContinue |
    Stop-Process -Force

$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
$codexDir = "$HOME\.codex"
$backupDir = "$HOME\.codex-backup-$stamp"

# 完整备份,防止本地会话或设置丢失
if (Test-Path $codexDir) {
    Copy-Item $codexDir $backupDir -Recurse -Force
    Write-Host "备份位置:$backupDir"
}

# 仅移除登录和自定义提供商配置
Remove-Item "$codexDir\config.toml" -Force -ErrorAction SilentlyContinue
Remove-Item "$codexDir\auth.json" -Force -ErrorAction SilentlyContinue

# 清除可能的自定义服务地址
$vars = @(
    "CODEX_HOME",
    "CODEX_ACCESS_TOKEN",
    "CODEX_API_KEY",
    "OPENAI_BASE_URL",
    "OPENAI_API_BASE"
)

foreach ($name in $vars) {
    Remove-Item "Env:$name" -ErrorAction SilentlyContinue
    [Environment]::SetEnvironmentVariable($name, $null, "User")
}

Write-Host "自定义 Codex 配置已清理。"

执行完成后:

  1. 关闭当前 PowerShell 窗口。
  2. 重新打开 ChatGPT 或 Codex。
  3. 按照提示使用 ChatGPT 官方账号重新登录。
  4. 检查左下角是否还显示 custom

在我的环境中,执行以上脚本后,Codex 成功恢复了正常的官方登录状态。


三、脚本具体做了什么

1. 关闭相关进程

脚本首先执行:

Get-Process ChatGPT,Codex,CodexPlusPlus -ErrorAction SilentlyContinue |
    Stop-Process -Force

它会尝试关闭以下进程:

ChatGPT
Codex
CodexPlusPlus

这是为了防止配置文件正在被应用占用。

如果不先关闭应用,删除配置后,正在运行的程序可能重新写回旧配置,或者继续使用内存中已加载的自定义配置。

参数:

-ErrorAction SilentlyContinue

表示某个进程不存在时不显示错误,因此可以直接执行。


2. 创建带时间戳的备份目录

脚本生成当前时间:

$stamp = Get-Date -Format "yyyyMMdd-HHmmss"

例如:

20260728-103500

然后设置 Codex 配置目录:

$codexDir = "$HOME\.codex"

通常对应:

C:\Users\你的用户名\.codex

备份目录则类似:

C:\Users\你的用户名\.codex-backup-20260728-103500

这样每次执行脚本都会生成一个新的备份,不会直接覆盖旧备份。


3. 完整备份 .codex 目录

脚本执行:

if (Test-Path $codexDir) {
    Copy-Item $codexDir $backupDir -Recurse -Force
    Write-Host "备份位置:$backupDir"
}

如果 .codex 目录存在,就将整个目录复制到带时间戳的备份目录中。

这一步很重要,因为 .codex 目录除了保存登录和 Provider 配置外,还可能包含:

  • Codex 偏好设置
  • 会话状态
  • 项目配置
  • 日志
  • 本地缓存
  • 其他用户配置

先备份,再清理指定文件,可以避免误操作造成不可恢复的数据丢失。


4. 删除 config.toml

脚本删除:

Remove-Item "$codexDir\config.toml" -Force -ErrorAction SilentlyContinue

config.toml 通常用于保存 Codex 的配置,包括:

  • 当前使用的模型
  • 模型提供商
  • 自定义 Provider
  • 第三方接口地址
  • API Base URL
  • 环境变量名称
  • 其他运行参数

Codex++ 可能会在该文件中加入类似下面的配置:

model_provider = "custom"

或者:

[model_providers.custom]
base_url = "https://example.com/v1"
env_key = "CODEX_API_KEY"

即使 Codex++ 已经卸载,只要 config.toml 中仍然指定了 custom Provider,官方 Codex 启动后仍然可能显示 custom

删除该文件后,Codex 会在下次启动时重新使用默认配置,或者重新生成配置文件。


5. 删除 auth.json

脚本删除:

Remove-Item "$codexDir\auth.json" -Force -ErrorAction SilentlyContinue

auth.json 可能保存:

  • 登录状态
  • 访问令牌
  • API Key 认证信息
  • 自定义服务认证信息
  • 旧的账号会话

如果文件中仍保存着 Codex++ 或第三方 Provider 的认证数据,仅删除 config.toml 可能还不够。

删除 auth.json 后,Codex 会要求重新登录,从而重新建立官方 ChatGPT 认证状态。


6. 清除当前 PowerShell 会话中的环境变量

脚本定义了以下变量:

$vars = @(
    "CODEX_HOME",
    "CODEX_ACCESS_TOKEN",
    "CODEX_API_KEY",
    "OPENAI_BASE_URL",
    "OPENAI_API_BASE"
)

这些变量可能影响 Codex 的配置目录、认证方式或接口地址。

循环中的这一行:

Remove-Item "Env:$name" -ErrorAction SilentlyContinue

用于删除当前 PowerShell 会话中的对应环境变量。

例如,如果当前终端中存在:

OPENAI_BASE_URL=https://example.com/v1

Codex 可能继续连接第三方接口,而不是 OpenAI 官方服务。


7. 清除用户级永久环境变量

脚本还执行:

[Environment]::SetEnvironmentVariable($name, $null, "User")

这一步用于清除 Windows 用户级环境变量。

只删除当前终端中的:

Remove-Item Env:OPENAI_BASE_URL

是不够的,因为重新打开 PowerShell 或重新启动应用后,Windows 仍然可能从用户环境变量中加载该值。

设置为 $null 后,对应用户级变量会被删除。


四、需要清除的环境变量说明

CODEX_HOME

CODEX_HOME 用来指定 Codex 的配置根目录。

默认情况下,Codex 可能读取:

C:\Users\用户名\.codex

但如果设置了:

CODEX_HOME=D:\CustomCodex

即使已经清理了默认的 .codex 目录,Codex 仍然会从其他目录加载旧配置。

因此需要清除该变量。


CODEX_ACCESS_TOKEN

该变量可能保存 Codex 的访问令牌。

如果仍然存在旧令牌,应用可能继续使用原来的认证状态。


CODEX_API_KEY

该变量可能用于自定义 Codex Provider 的 API Key 认证。

清除后,可以避免 Codex 自动使用第三方 API Key。


OPENAI_BASE_URL

该变量可能将请求重定向到自定义服务,例如:

https://example.com/v1

如果它仍然存在,即使界面是官方 Codex,请求也可能不会发送到 OpenAI 官方接口。


OPENAI_API_BASE

这是另一种常见的自定义接口地址变量。

部分工具使用 OPENAI_BASE_URL,另一些工具使用 OPENAI_API_BASE,因此脚本同时清理两者。


五、为什么卸载 Codex++ 后问题仍然存在

原因在于,卸载程序和清除用户配置是两件不同的事情。

Codex++ 被卸载后,以下内容可能仍然保留:

C:\Users\用户名\.codex\config.toml
C:\Users\用户名\.codex\auth.json

以及用户环境变量:

CODEX_HOME
CODEX_ACCESS_TOKEN
CODEX_API_KEY
OPENAI_BASE_URL
OPENAI_API_BASE

卸载 Codex++ 通常只删除:

  • Codex++ 程序本体
  • 启动器
  • 部分补丁文件
  • 部分应用组件

为了避免用户配置和认证信息意外丢失,卸载程序一般不会主动删除整个 .codex 目录,也未必会清理 Windows 用户环境变量。

因此会出现这种情况:

Codex++ 已卸载
        ↓
自定义配置仍然存在
        ↓
官方 Codex 启动
        ↓
继续读取 custom Provider
        ↓
界面仍然显示 custom

六、执行脚本后的正确操作

脚本执行完成后,建议关闭当前 PowerShell 窗口。

这是因为环境变量修改后,已经运行的程序不会自动刷新环境。关闭并重新打开应用,可以确保它读取最新的环境变量状态。

推荐步骤:

执行清理脚本
→ 关闭 PowerShell
→ 确认 ChatGPT/Codex 已完全退出
→ 重新启动 ChatGPT
→ 进入 Codex
→ 使用官方 ChatGPT 账号登录

如果任务栏中仍有旧的 Codex++ 快捷方式,也应删除旧快捷方式,从 Windows 开始菜单重新启动官方 ChatGPT 应用。


Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐