记一次极其顽固的 Xbox Gaming Services 死锁排查和其修复方法 (0x80070426 / Error 1060)

背景

近期 Windows 11 更新后,Xbox App 彻底罢工,打开直接报错 0x80070426。 打开系统服务 (services.msc),发现里面躺着两个同名的 Gaming Services:一个所有按钮灰显无法点击,另一个点击启动报 错误 1060: 指定的服务未安装

折腾了一圈:

  • 常规的 PowerShell Remove-AppxPackage 清理和商店重装,无解。
  • 运行微软官方的专用修复工具 GamingRepairTool.exe,毫无反应,依然无解。
  • 动用 PsExec 提权到 SYSTEM 级别执行 sc delete 试图强删该服务,竟然报 Error 5: 拒绝访问
  • 进入 WinRE 物理强删了 WindowsApps 下的文件,甚至“保留应用”的系统重装(In-place Upgrade)都没救,重启后该服务原样复活。

这就很诡异了:连 SYSTEM 权限都无权删除,且重装系统(保留配置)都洗不掉。 其实问题根本不在文件权限,也不在 AppX 部署引擎,而在于 Windows 的内核驱动状态。排查过程见下。

排查思路

既然连 SYSTEM 都报 Error 5,且覆盖安装无效(说明损坏的状态库被当做合法配置继承了),必须绕过 UWP 机制,直接通过硬编码向系统注入该服务。

使用 sc.exe create 强行写入物理路径并执行启动后。 现象很明确:系统抛出 [SC] StartService 失败 1056: 服务的实例已在运行中。 查看具体状态,显示为 STATE : 2 START_PENDING (启动挂起)。

这就解释了之前的 Error 5:进程在后台无限期卡在“启动中”状态。Windows 内核保护机制绝对禁止修改或删除一个正在 Pending 的服务,导致它获得了系统级的“无敌护盾”。

根源分析

为什么会无限挂起?Gaming Services 不是一个普通的后台程序,它深度依赖系统底层的文件系统微过滤驱动(Minifilter Driver)来挂载 Xbox 的虚拟磁盘(XVD)。

顺藤摸瓜检查底层驱动,发现基础块设备驱动 xvdd.sys 正常,但专用的游戏过滤驱动 gameflt.sys1060 未安装。 似乎是Windows 更新时意外弄丢了 gameflt 驱动的注册信息。服务启动时向内核请求调用该过滤驱动,得不到回应,陷入了无限期的阻塞死循环。

解决方案

既然死因是缺驱动导致的进程挂起,对症下药即可:

  1. 打破死锁释放句柄:强制杀掉卡死的进程。
    taskkill /F /IM GamingServices.exe /T taskkill /F /IM GamingServicesNet.exe /T
  2. 从系统驱动坟墓中挖出原生驱动: 定位到 C:\Windows\System32\DriverStore\FileRepository,搜索 gameflt.inf。 使用自带的包管理工具强行将其重新注入内核:
    pnputil /add-driver "你的gameflt.inf绝对路径" /install
  3. 唤醒内核驱动并重启服务
    sc start gameflt sc start GamingServicesNet sc start GamingServices

打开 Xbox App,正常秒进。

总结

SYSTEM 权限操作服务报 Error 5 时,多半是卡在了 START_PENDING。遇到深度绑定系统的 UWP 应用(如带虚拟磁盘逻辑的 Xbox 组件)陷入死锁,与其在应用层面上重装或纠结权限,不如直接向下查它的 .sys 内核驱动依赖。

PowerToys PowerRename 右键菜单不显示排查 (Shell Extension Blocked)

背景

笔者在Windows10 22H2(2009, 19045.6456)中新装了 PowerToys (v0.96),右键菜单/Shift+右键均不见PowerRename踪影

折腾了一圈:

  1. 常规的检查注册表,重启系统/资源管理器,无解。
  2. 重装软件,甚至回退到 v0.88 和 v0.7x 这种老架构版本,依然无解。
  3. 用 ShellExView 查看,PowerRenameContextMenu Class 状态显示为 Enabled (绿色)

这就很诡异了:注册表显示已启用,文件也在,但菜单就是出不来。

其实问题不在软件本身,而在 Windows 的“故障隔离”机制。排查过程见下。

排查思路

既然 ShellExView 显示扩展是启用的,说明常规注册表项没问题。怀疑是资源管理器(Explorer)因为某种原因“拒绝”加载它。

使用 Process Explorer 搜索 PowerRename 相关的句柄或 DLL。

打开 Process Explorer,搜索 PowerRename。结果显示只有 PowerToys.exe 加载了 PowerToys.PowerRenameExt.dll

现象很明确:Explorer 根本没加载这个 DLL。

根源分析

Windows 资源管理器有一个保护机制:如果某个 Shell Extension 在加载时导致过 Explorer 崩溃、卡死或超时(可能发生在安装瞬间的冲突),Windows 会静默将该扩展的 CLSID 加入系统级的“黑名单”。

一旦进入黑名单,无论你怎么重装软件(因为卸载程序通常不敢动系统级的 Blocked 注册表),Explorer 都会永久忽略该扩展。

解决方案

检查注册表中的 Shell Extension 黑名单。

位置在:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked
打开注册表编辑器,定位到上述路径。右侧列表中有一个名称为 {0440049F-D1DC-4E46-B27B-98393D79486B} 的项

PowerRename 的 CLSID 正是右侧列表中的 {0440049F-D1DC-4E46-B27B-98393D79486B}

直接删除该键值,重启资源管理器即可。

如果是 File Locksmith 不显示,同理检查 {E5235BAE-8628-4E57-9694-D1F3780D21B7}

总结

软件重装无效且 ShellExView 正常时,有可能是进了 Windows 的 Shell Extensions\Blocked。与其在软件配置上浪费时间,直接查注册表黑名单。