乐于分享
好东西不私藏

AppX应用卸载重装后点不开?我遇到了一次典型的"商店应用死锁"故障-Codex修复篇

AppX应用卸载重装后点不开?我遇到了一次典型的"商店应用死锁"故障-Codex修复篇
    今天遇到一个头疼的问题,早上开机,电脑启动极慢,然后CODEX DESKTOP无法启动,排查日志,提示是有两个CODEX DESKTOP信息,整个花了一天时间排查和修复,整个过程涉及了不少Windows底层机制,分享出来希望能帮到遇到类似问题的朋友。

问题的症状

Codex Desktop突然无法启动。于是我:
  1. 先去 设置 → 应用 → 已安装的应用里卸载
  2. 再去 Microsoft Store 重新安装
  3. 点击桌面图标 / 开始菜单图标
结果——毫无反应。进程管理器里也看不到任何 Codex 进程,然后设置-应用里面仍然有CODEX。
    查询后这个场景可能是:AppX 包(商店应用)在卸载重装后,注册信息出了问题

第一步排查:AppX 包到底在不在?

用 PowerShell (管理者模式):
powershell
Get-AppxPackage -Name "OpenAI.Codex"
输出显示包还在,状态是 `Ok`。但再看 `Get-StartApps`,开始菜单注册列表里已经找不到 Codex 的入口了。
说明:安装文件还在磁盘上,但注册信息丢失了。
再进一步查 `C:\Program Files\WindowsApps` 目录:
OpenAI.Codex_26.609.3341.0_x64__2p2nqsd0c76g0   ← 旧版残留
OpenAI.Codex_26.609.4994.0_x64__2p2nqsd0c76g0   ← 当前版
问题浮出水面:新版本安装时没清理旧版,两个版本共存,AppX 注册表乱了。

为什么卸载不掉?

尝试用 PowerShell 卸载:
powershell
Get-AppxPackage -Name "OpenAI.Codex" | Remove-AppxPackage -AllUsers
报错:
用户已取消安装请求。Deployment operation failed.
用 设置 → 应用 → 卸载,同样是卸载到一半卡死。
问题根源是 AppX 部署服务(AppXSVC)死锁了

什么是 AppXSVC?为什么会死锁?

AppXSVC(AppX Deployment Service)是 Windows 管理商店应用安装、卸载、更新的核心服务。它的工作方式是:
  1. 收到安装/卸载请求后,串行排队处理
  2. 上一个操作没完成,下一个操作就进不了队列
因为之前的卸载操作被用户中断(或者被其他进程干扰),队列里挂了一个孤儿请求。之后所有的卸载/重装操作都排在这个孤儿请求后面,永远执行不了。
查看服务状态:
powershell
Get-Service AppXSVC
显示 Running,但实际内部队列卡住了,找到服务进程的 PID
sc queryex AppXSVC (Get-WmiObject Win32_Service -Filter "Name='AppXSVC'").ProcessId
PID = 9020
这个进程一直在运行,但无法响应新的部署请求。

尝试一:重启服务

powershell
Restart-Service AppXSVC -Force
失败。报错:
无法停止服务"AppX Deployment Service (AppXSVC)"
服务进程被系统保护,普通管理员权限杀不掉。
powershell
taskkill /f /pid 9020
拒绝访问

尝试二:sc 命令操作

powershell
sc.exe stop AppXSVC
sc.exe config AppXSVC start=disabled
都返回 拒绝访问(错误 5)。AppXSVC 受 TrustedInstaller 保护,比管理员权限还高一级。

尝试三:直接删除文件

既然服务卸不掉,那直接从磁盘删文件行不行?
powershell
Remove-Item "C:\Program Files\WindowsApps\..." -Recurse -Force
报错:
文件"AppxManifest.xml"正由另一进程使用
这个文件被 AppXSVC 进程锁着。尝试用 `takeown` 夺取所有权:
powershell
takeown/f"C:\Program Files\WindowsApps\OpenAI.Codex_26.609.4994.0_x64__2p2nqsd0c76g0" /r /d y
成功!拿到了所有权。但删除还是被锁——所有权和文件锁是两回事。AppXSVC 以系统服务的身份持有了文件句柄,不是换个所有者就能解锁的。

尝试四:注册表标记重启删除

Windows 有个隐藏机制:PendingFileRenameOperations
这个注册表项位于:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager
它的作用是这样的:
- 系统重启过程中、加载任何用户态服务之前
- 会先检查这个注册表项
- 按里面的列表执行文件删除或重命名操作
- 这时 AppXSVC 还没启动,没有任何进程锁住文件
- 文件被干净地删除
用代码写入:
powershell
$path="C:\Program Files\WindowsApps\OpenAI.Codex_26.609.4994.0_x64__2p2nqsd0c76g0"
cmd/c"regadd ""HKLM\SYSTEM\CurrentControlSet\Control\Session Manager"" /v PendingFileRenameOperations /t REG_MULTI_SZ /d ""\??\$path\*\0"" /f"
这次成功了。重启电脑后,两个 Codex 残留目录被自动清除。

最后的修复

重启后,去 Microsoft Store 搜索 Codex,重新安装。安装很顺利,点击图标正常启动。
收工

技术要点总结

机制
作用范围
权限等级
本案例中是否可用
Remove-AppxPackage
AppX 管理 
管理员
卡死
sc stop/query
 服务管理 
管理员
拒绝访问 
taskkill /f
进程管理
管理员 
拒绝访问
takeown
文件所有权 
管理员
 可用,但文件被锁             
PendingFileRenameOperations
重启时文件操作 
管理员
可用 

核心启示

这次故障写了三条结论,我觉得比具体的命令更有价值:
第一条:AppX 应用的卸载/重装如果卡死,大概率是 AppXSVC 服务内部有孤儿请求。不要反复点卸载——越点越卡。
第二条:不要跟系统服务死磕。AppXSVC 受 TrustedInstaller 保护,安全模式下或利用 PendingFileRenameOperations 是更聪明的路子。
第三条:WindowsApps 目录被 TrustedInstaller 保护是有原因的——它是商店应用的安全边界。绕开它之前,先确认你真的需要这么做。
如果你也遇到过类似的问题,希望这篇文章能帮你理清排查思路。排错最重要的不是记住某条命令,而是理解系统的工作机制——知道"去哪儿找问题",比知道"怎么修"更重要。
备选方案:如果不想走这些弯路,直接在安全模式下删除 WindowApps 里的残留目录,再去商店重装,也能解决问题。本文介绍的 PendingFileRenameOperations 方法更适合不方便重启进安全模式的情况。