总结
通用 Windows 平台 (UWP)应用旨在使用单个代码库在Windows 10上运行和Windows 11。 本文介绍如何排查由于注册表权限问题而无法立即打开或关闭的 UWP 应用,帮助还原功能。
UWP 应用失败的症状
在Windows 10或Windows 11设备上,内置 UWP 应用在启动后可能无法立即打开或关闭。 此问题会影响设备上的所有用户帐户。
受影响的应用可能包括:
- Microsoft Store
- 公司门户
- Microsoft Entra (Azure AD) Broker 插件 (Token Broker)
- Microsoft锁屏相关组件
其他症状可能包括:
- BackgroundTaskHost.exe 重复崩溃
- 引用 twinapi.appcore.dll 的应用程序崩溃事件
- 异常代码 0xC0000409
- 错误签名,包括 FAIL_FAST_FATAL_APP_EXIT_8007000e
注册表权限问题的原因
当以下注册表项上缺少所需的注册表权限时,会出现此问题:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
UWP 应用在所有 应用程序包 安全主体(SID: S-1-15-2-1)下运行,并要求对此密钥具有 读取 访问权限。 如果缺少此权限或禁用继承,则 UWP 应用无法读取所需的系统配置数据,并且可能无法启动。
在受影响的环境中:
- ALL APPLICATION PACKAGES 条目缺少所需的读取权限。
- 访问控制列表 (ACL) 继承在密钥上被阻止。
- 权限可能存在于 ControlSet001 下,但 当前ControlSet 中缺少该权限,这是运行时使用的活动控件集。
UWP 应用的故障排除步骤
要解决该问题,请遵循以下步骤。
重要
注册表的更改不正确可能会导致严重的系统问题。 请仔细执行这些步骤,并确保在继续操作之前具有备份。
步骤 1:以管理员身份打开 PowerShell
- 选择 “开始”,然后键入
PowerShell。 - 右键单击 Windows PowerShell,然后选择以管理员身份运行。
步骤 2:设置目标注册表路径
在 PowerShell 中运行以下命令以设置目标注册表路径:
$path = "HKLM:\SYSTEM\CurrentControlSet\Control"
步骤 3:启用继承
运行以下命令以在注册表项上启用继承:
$acl = Get-Acl $path
$acl.SetAccessRuleProtection($false, $true)
Set-Acl -Path $path -AclObject $acl
步骤 4:添加“所有应用程序包”ReadKey 权限
运行以下命令以添加所需的权限:
$acl = Get-Acl $path
$accessRule = New-Object System.Security.AccessControl.RegistryAccessRule(
"ALL APPLICATION PACKAGES",
"ReadKey",
"ContainerInherit,ObjectInherit",
"None",
"Allow"
)
$acl.SetAccessRule($accessRule)
Set-Acl -Path $path -AclObject $acl
步骤 5:验证权限(可选但建议)
运行以下命令以确认正确应用了 ALL APPLICATION PACKAGES 权限:
(Get-Acl $path).Access | Where-Object { $_.IdentityReference -like "*ALL APPLICATION PACKAGES*" }
分辨率
还原所需权限后:
- UWP 应用应正常打开。
- Microsoft Store、公司门户和其他受影响的应用应按预期运行。
- BackgroundTaskHost.exe 崩溃事件不应再发生。
如果问题仍然存在,请重启设备并再次测试。