适用情况:点「启动」仍去打开旧的商店包,报文件系统错误;或卸掉后用微软商店 / winget 重装,报 0x803fb017

ChatGPT Windows 桌面版是微软商店应用,包名是 OpenAI.Codex,产品编号是 9PLM9XGG6VKS。不要到 C:\Program Files\WindowsApps 里手动删目录。

以下命令都在当前用户的管理员 PowerShell 里执行。

现象

旧包路径:

C:\Program Files\WindowsApps\OpenAI.Codex_26.917.6896.0_x64__2p2nqsd0c76g0\app\ChatGPT.exe

点「启动」时报:

文件系统错误 (-2143309801)

-2143309801 就是 0x803fb017。卸掉旧包后直接重装,winget 也会停在同一个错误码。

点「启动」时,窗口仍去打开旧包里的 ChatGPT.exe

点启动后报文件系统错误,路径指向 OpenAI.Codex 旧包

「已准备就绪」页面上的版本仍是 26.917,再点「启动」会弹出同一个错误:

ChatGPT 已准备就绪,版本 26.917,启动仍报文件系统错误

原因

有两层,要按顺序处理。

  1. 本机还登记着损坏的商店包 OpenAI.Codex_26.917.6896.0_x64__2p2nqsd0c76g0。开始菜单或旧窗口里的「启动」会继续调用这个包里的 ChatGPT.exe
  2. 旧包卸掉之后,系统 WinHTTP 代理仍指向 127.0.0.1:9203,但这个端口没有程序在监听。微软商店的下载走 WinHTTP,所以 winget install 拿到 0x803fb017

浏览器里的代理是另一套设置。这次用户代理是关闭的(ProxyEnable = 0,地址 127.0.0.1:6789),拦下载的是 WinHTTP 的 127.0.0.1:9203

winget 显示 版本: Unknown 是商店应用的正常结果,不代表安装失败。

完整步骤

1. 确认残留

Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*, HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -match 'ChatGPT|OpenAI' } | Select-Object DisplayName, DisplayVersion, Publisher, InstallLocation, UninstallString | Format-List
Get-AppxPackage -AllUsers | Where-Object { $_.PackageFullName -like 'OpenAI.Codex_*' } | Select-Object Name, PackageFullName, InstallLocation | Format-List
Test-Path "$env:LOCALAPPDATA\OpenAI"

商店包不会出现在普通「卸载」注册表里。以 Get-AppxPackage 的结果为准。

2. 卸掉旧包并清用户数据

Get-Process | Where-Object { $_.ProcessName -match 'ChatGPT|OpenAI' } | Stop-Process -Force -ErrorAction SilentlyContinue
Get-AppxPackage -AllUsers | Where-Object { $_.PackageFullName -like 'OpenAI.Codex_*' } | ForEach-Object {
  Remove-AppxPackage -Package $_.PackageFullName -AllUsers -ErrorAction Stop
  "REMOVED $($_.PackageFullName)"
}
Remove-Item -LiteralPath "$env:LOCALAPPDATA\OpenAI","$env:APPDATA\OpenAI" -Recurse -Force -ErrorAction SilentlyContinue

卸载成功时,事件日志里会出现类似记录(结果 0x0):

正在将程序包文件夹 C:\Program Files\WindowsApps\OpenAI.Codex_... 移动到
C:\Program Files\WindowsApps\Deleted\OpenAI.Codex_...
部署 Remove 操作已成功完成。

查看命令:

Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-AppXDeploymentServer/Operational'; StartTime=(Get-Date).AddHours(-3)} -ErrorAction SilentlyContinue |
  Where-Object { $_.Message -match 'OpenAI.Codex' } |
  Select-Object -First 4 TimeCreated, Id, Message |
  Format-List

3. 重装前检查 WinHTTP 代理

netsh winhttp show proxy
$c = Get-NetTCPConnection -LocalPort 9203 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1
if ($c) { "LISTENING pid=$($c.OwningProcess) $((Get-Process -Id $c.OwningProcess -ErrorAction SilentlyContinue).ProcessName)" } else { 'NOT LISTENING' }

输出是 NOT LISTENING,且 netsh 仍显示 127.0.0.1:9203 时,这就是 0x803fb017 的原因。清掉失效代理:

netsh winhttp reset proxy

清完后应显示「直接访问(没有代理服务器)」。

如果 9203 显示 LISTENING,说明代理软件正在运行。先让它放行 *.mp.microsoft.com,安装过程中不要关闭它,不要执行 netsh winhttp reset proxy

4. 安装

Get-Service InstallService -ErrorAction SilentlyContinue | ForEach-Object { Set-Service $_.Name -StartupType Manual; Start-Service $_.Name }
winget install --id 9PLM9XGG6VKS -s msstore --accept-package-agreements --accept-source-agreements

成功时最后几行是:

验证/请求程序包获取成功
正在启动程序包安装...
已成功安装

装完后从开始菜单打开 ChatGPT。不要再点卸掉之前那个窗口里的「启动」。

商店页面若先弹出「请稍后重试 / 我们这边出现了问题」,先关掉,改走上面的 winget。这个弹窗同样是商店下载失败,和旧包里的 ChatGPT.exe 不是同一步。需要刷新商店缓存时再执行 wsreset.exe

微软商店安装 ChatGPT 时提示请稍后重试

这次机器上的结论

检查项 结果 是否导致装不上
旧包 OpenAI.Codex_26.917.6896.0_x64__2p2nqsd0c76g0 11:50:53 已成功移除 会让旧的「启动」继续报错,移除后不再影响安装
WinHTTP 代理 127.0.0.1:9203,端口 NOT LISTENING 是。netsh winhttp reset proxy 后安装成功
用户代理 已关闭,地址 127.0.0.1:6789
系统时间 已与 time.windows.com 同步
InstallService 正在运行
winget 版本显示 Unknown 商店源的正常显示
日志里的 LittleBit_is1winToolBox 读取卸载注册表失败,已被忽略

失败时再看日志

安装再次报错时执行:

$log = Get-ChildItem "$env:LOCALAPPDATA\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir\*.log" -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -First 1
Select-String -Path $log.FullName -Pattern '803fb017|FAIL' | Select-Object -Last 12 | ForEach-Object Line

真正对应这次失败的一行是:

Caught winrt::hresult_error: 0x803fb017 : unknown error