无 TUN 启动 Codex:让代理脚本自动适配端口变化
修复一个升级后失效的 Codex 桌面启动脚本:不再写死代理端口,而是安全读取并验证 Windows 当前代理。
我一直使用桌面快捷方式,在不开启 TUN 的情况下为 Codex 单独设置本地代理。一次应用和代理客户端升级后,双击快捷方式不再启动 Codex,也没有清楚的错误提示。
检查发现 Codex 安装本身正常,真正的问题是启动脚本和全局配置都写死了旧代理端口,而代理客户端已经切换到新端口。脚本在启动应用前检测失败并直接退出。
不再猜测端口
修复后的 PowerShell 脚本按以下优先级选择代理:
- 用户显式传入的 Proxy 参数;
- Windows 当前用户代理设置;
- 没有有效代理时明确报错并停止。
系统代理可能是简单的 host:port,也可能按 HTTP、HTTPS 分项配置。脚本统一解析这些格式,但只接受回环地址,避免把未知远程代理悄悄注入 Codex。
在启动或重启应用之前,脚本先确认端口正在监听。任何解析或连通性失败都发生在停止现有 Codex 进程之前,因此坏配置不会把正在使用的应用一起关闭。
只影响新进程
检测到的地址只写入本次 Codex 进程的 HTTP_PROXY、HTTPS_PROXY 和 ALL_PROXY,同时保留 NO_PROXY。脚本不会永久修改注册表代理,也不会写入用户级环境变量。
全局 Codex 配置中原来强制覆盖旧端口的环境设置被删除,只保留继承当前进程环境的策略。否则即使启动脚本传入了正确地址,固定配置仍会再次覆盖它。
批处理入口也增加失败处理:PowerShell 返回非零状态时保留窗口并显示原因,成功启动后再正常关闭。
验证与适用边界
验证分为不会影响当前工作的安全步骤:
- PowerShell 语法和配置文件解析通过;
- DryRun 能解析系统代理,但不修改进程、注册表或环境变量;
- 指定未监听端口时返回明确错误,并保持现有 Codex 运行;
- 通过本地代理访问 OpenAI 服务获得可达性响应;
- 不带 Restart 的安全启动成功,新进程建立到本地代理的连接;
- 分项代理格式也能正确解析。
没有在任务进行中执行完整重启,以避免终止当前会话。最终桌面快捷方式保持不变,代理客户端以后修改本地端口时也不需要手工编辑脚本。
这个修复的重点不是找到另一个可用端口,而是取消端口作为隐藏常量。对本机启动自动化来说,读取当前状态、验证副作用前置条件,并在失败时保留现有进程,比“强制重启再看结果”更可靠。
先说明系统,再说明症状
如果需要生产排障、DevOps 交付或物流系统集成协作,请提供当前表现、预期结果、受影响环境、可用日志或数据样例,以及发布限制。我会从现有证据开始判断。
通过邮件开始