让 UWP 应用 (OpenAI Codex) 走本地代理的完整折腾指南
📌 背景与痛点
为了让我电脑上的 OpenAI Codex (Microsoft Store 版/UWP版) 能够通过本地的代理软件 (127.0.0.1:7890) 联网,我最初尝试写了一个简单的 PowerShell 脚本设置环境变量并启动程序,但遭遇了连环挫折:
Start-Process不继承环境变量:PS1 脚本中设置的$env:HTTP_PROXY只对当前进程有效,Start-Process打开的新进程无法读取。WindowsApps权限拦截:尝试直接运行C:\Program Files\WindowsApps\...\Codex.exe时,被系统拒绝访问,提示CommandNotFoundException。- UWP 网络隔离:这是最隐蔽的坑。UWP 应用运行在沙箱中,默认被禁止访问本机回环地址 (
127.0.0.1),且不读取系统环境变量,只读取 Windows 系统代理设置。
🛠️ 最终解决方案核心思路
- 启动方式:放弃绝对路径,利用快捷方式属性中找到的
AppUserModelID(AUMID) 启动应用。 - 代理设置:放弃环境变量,通过修改注册表直接开启 Windows 系统代理。
- 解除网络隔离:使用
EnableLoopback工具为 Codex 放行本机访问权限。
🚀 实施步骤
第一步:解除 UWP 本地网络限制 (必须)
UWP 默认无法连接 127.0.0.1,必须解除 Loopback 限制:
- 下载微软官方小工具:EnableLoopback Utility
- 右键以管理员身份运行该工具。
- 在列表中找到 OpenAI Codex,勾选它。
- 点击 Save Changes。
第二步:创建 PowerShell 脚本 (核心逻辑)
在桌面新建文本文档,重命名为 Codex Proxy.ps1,写入以下代码:
1# 1. 设置 Windows 系统代理(UWP 应用只认这个) 2 $regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" 3Set-ItemProperty -Path $regPath -Name ProxyEnable -Value 1 4Set-ItemProperty -Path $regPath -Name ProxyServer -Value "127.0.0.1:7890" 5Set-ItemProperty -Path $regPath -Name ProxyOverride -Value "localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*" 6 7Write-Host "System Proxy ON: 127.0.0.1:7890" -ForegroundColor Green 8 9# 2. 利用快捷方式里的 AUMID 启动 Codex (完美避开 WindowsApps 权限问题) 10Start-Process "shell:AppsFolder\OpenAI.Codex_2p2nqsd0c76g0!App" 11 12Write-Host "Codex Started!" -ForegroundColor Green 13Write-Host "----------------------------------------" 14Write-Host "Press Y to turn OFF system proxy, or any other key to exit." -ForegroundColor Yellow 15 16# 3. 交互式关闭代理(防止系统代理一直挂着影响其他软件) 17 $choice = Read-Host "Input choice" 18if ($choice -eq 'Y' -or $choice -eq 'y') { 19 Set-ItemProperty -Path $regPath -Name ProxyEnable -Value 0 20 Write-Host "System Proxy OFF." -ForegroundColor Green 21}
(注:如果你的代理端口不是 7890,请修改 ProxyServer 那一行的端口号)
第三步:创建 BAT 启动器 (双击即运行)
由于直接双击 .ps1 文件默认会在记事本打开,我们需要一个 .bat 文件来唤醒它。
在与 Codex Proxy.ps1 同目录下,新建文本文档,重命名为 Start Codex.bat,写入以下代码:
1@echo off 2powershell.exe -ExecutionPolicy Bypass -File "C:\Users\kolik\Documents\Codex\icon\Codex Proxy.ps1" 3pause
pause可以不要,调试的时候方便看信息
第四步:美化快捷方式 (更换图标)
BAT 文件默认图标太丑,我们可以通过创建快捷方式来换皮:
- 右键点击
Start Codex.bat-> 发送到 -> 桌面快捷方式。 - 回到桌面,右键刚刚创建的快捷方式 -> 属性。
- 点击更改图标,选择你喜欢的
.ico图标文件(你可以去网上下载一个好看的 Codex 图标)。 - 还可以在这个界面把运行方式改为最小化,这样启动时黑框就不会闪那么大。
💡 总结与避坑
- UWP 不读环境变量:遇到 Store 版应用需要代理,直接改系统注册表是最稳的。
- UWP 沙箱限制:如果代理软件本身没有开启 TUN 模式(虚拟网卡接管),一定要用 EnableLoopback 解除限制。
- AUMID 是关键:通过
shell:AppsFolder\包名!App的方式启动 UWP 应用,是最优雅且不会因版本更新而失效的方法。 - 标点符号杀手:写 PS1 脚本时,遇到报错先检查是不是用了中文的全角引号
“”,必须替换为英文半角""。