↓ 跳过正文
没有管理员权限,怎样在 Windows 上安装 Codex

没有管理员权限,怎样在 Windows 上安装 Codex

·1745 字·4 分钟· loading · loading ·
曙光磁铁
作者
曙光磁铁

在没有管理员权限的 Windows 上安装 Codex,麻烦经常发生在下载之前。OpenAI 的 Windows 文档给出的命令很短。

winget install --id 9PLM9XGG6VKS -s msstore

这条命令能正常运行时,直接用它就好。有些受管理的电脑缺少可用的 winget,msstore 源也可能无法工作。用户知道 Codex 就在 Microsoft Store 里,却没有权限修复 App Installer,也不能把整台机器的策略改掉。

我写 wingets,就是为了补上这一小段路。它用 Codex 的 Store 产品 ID 找到官方包,把文件下载到用户目录,再通过 Add-AppxPackage 为当前用户注册。整个过程不需要管理员权限,也不会安装 PowerShell 模块。

先把 Codex 装上
#

打开 DawnMagnet 的 wingets Gist 可以先查看完整源码。下面的命令把脚本放进当前用户的 LocalAppData,不会写入系统目录。

$wingetsPath = Join-Path $env:LOCALAPPDATA 'wingets\wingets.ps1'
$wingetsDir = Split-Path $wingetsPath

New-Item -ItemType Directory -Force -Path $wingetsDir | Out-Null
Invoke-WebRequest `
  -Uri 'https://gist.githubusercontent.com/DawnMagnet/3b05c689a849ba0cfc48cbaf55969d32/raw/wingets.ps1' `
  -OutFile $wingetsPath

随后安装 Codex。

powershell.exe -NoProfile -ExecutionPolicy Bypass `
  -File $wingetsPath install 9PLM9XGG6VKS

-ExecutionPolicy Bypass 只作用于这次启动的 PowerShell 进程,不会永久修改本机或当前用户的执行策略。脚本默认选择 x64。Windows on Arm 设备需要明确指定 arm64。

powershell.exe -NoProfile -ExecutionPolicy Bypass `
  -File $wingetsPath install 9PLM9XGG6VKS --architecture arm64

下载文件默认保存在 %USERPROFILE%\Downloads\wingets。安装完成后,可以删除脚本和下载目录,已经注册的 Codex 不受影响。第一次安装不要加 --force,这个选项会先卸载当前用户已有的包,应用数据和设置可能随之删除。

Wingets 补的是哪一块
#

官方命令依赖 Windows Package Manager、msstore 源和当前机器上的 App Installer 注册状态。管理员可以修复或重新部署这些组件。普通用户遇到同样的问题时,经常只能停在这里。

wingets 跳过损坏或不可用的 winget 客户端,继续使用 Microsoft 的服务和 Windows 自带的包注册能力。它不会提升权限,也不会绕过组织策略。这个区别很要紧。

脚本执行的流程很短。

Codex Store product ID 9PLM9XGG6VKS
        │
        ▼
Microsoft Store catalog returns WuCategoryId
        │
        ▼
Windows Update resolves current Retail packages and dependencies
        │
        ▼
Microsoft CDN download with digest verification
        │
        ▼
Add-AppxPackage registers packages for the current user

Microsoft Store 的产品元数据给出 PackageFamilyName 和 WuCategoryId。前者用于检查 Codex 是否已经安装,后者交给 Windows Update 查询当前可用的 MSIX、AppX 及依赖包。脚本按 FileDigest 关联元数据与下载地址,避免把列表顺序当成固定接口。

下载只接受 *.delivery.mp.microsoft.com。文件落盘后,脚本会核对 Windows Update 经 HTTPS 返回的 SHA-1 摘要,安装阶段再由 Windows 验证包签名。SHA-1 在这里用于检查传输内容,发布者身份仍由 Windows 的签名验证负责。

为什么删掉 WinStoreRip
#

早期版本依赖 WinStoreRip。继续追查以后,我发现这会要求目标电脑访问 PowerShell Gallery,还会把包链接查询交给第三方网页。受限电脑本来就容易卡在网络和组件状态上,再临时安装一个模块只会增加失败点。

现在的 wingets.ps1 是单文件脚本。它直接访问 Microsoft Store、Windows Update 和 Microsoft CDN,不需要 WinStoreRip,也不请求第三方包链接服务。

无管理员权限仍然有边界
#

Wingets 只为当前用户注册 Store 包,不支持 --scope machine。组织如果通过 AppLocker、WDAC 或 AppX 策略明确禁止这个包,脚本也会失败,它不会规避这些控制。

网络至少要能访问 storeedgefd.dsx.mp.microsoft.com、fe3.delivery.mp.microsoft.com 和 *.delivery.mp.microsoft.com。GitHub 只用于取得脚本,无法访问 Gist 时,可以在另一台机器上下载 wingets.ps1 再复制过来。

脚本只支持当前 Retail 通道,不负责安装任意历史版本。它也不是完整的 winget 替代品,不处理社区仓库里的 MSI、EXE、portable 或压缩包。这里的目标一直很窄,就是在普通用户权限下取得并安装 Microsoft Store 里的 Codex。

我实际测试了什么
#

发布版本分别在 Windows PowerShell 5.1 和 PowerShell 7 下跑过 26 项测试,覆盖中英文界面、长短参数、参数顺序、错误边界、Store 只读查询、包摘要、CDN 域名限制和一字节 Range 请求。

2026 年 9 月 14 日的实时查询返回 OpenAI.Codex 26.908.4834.0,文件大小为 774,918,112 字节。Microsoft CDN 对 Range 请求返回 206 Partial Content。最后一轮验证没有重新下载完整的 739 MiB 包,也没有强制卸载已经安装的 Codex,避免无意义地消耗带宽或改动工作站。

如果官方 winget 命令能用,Wingets 不会带来额外好处。它适合的情况很明确,你能运行普通 PowerShell,也能访问 Microsoft 的 Store 和更新服务,但没有管理员权限去修复已经坏掉的安装入口。

参考资料
#