如何获取微软商店UWP应用的URI以通过Game Bar Widget启动?
获取微软商店应用的自定义协议URI(UWP环境)
可行方案:通过PackageManager遍历应用扩展协议
微软商店应用的自定义协议必须在包清单中声明,因此可以通过PackageManager直接读取包的扩展信息,无需访问注册表,这是UWP环境下的官方支持方式。
步骤如下:
- 使用
PackageManager获取当前用户的所有已安装包 - 遍历每个包的
Extensions集合,筛选出ContractId为Windows.Protocol的扩展 - 该扩展的
Name属性即为应用的协议Scheme(例如contoso-game:)
代码示例(C#):
var packageManager = new PackageManager(); // 获取当前用户的所有已安装包 var installedPackages = packageManager.FindPackagesForUser(string.Empty); foreach (var package in installedPackages) { foreach (var extension in package.Extensions) { // 筛选协议类型扩展 if (string.Equals(extension.ContractId, "Windows.Protocol", StringComparison.OrdinalIgnoreCase)) { string uriScheme = extension.Name; // 拼接可用于启动的URI(示例:打开应用首页) Uri launchUri = new Uri($"{uriScheme}home"); // 后续可调用 widget.LaunchUriAsync(launchUri) 启动应用 // await widget.LaunchUriAsync(launchUri); } } }
关于你遇到的问题说明
GetAppInstallerInfo().Uri返回null:该属性用于获取App Installer部署文件的URI,并非应用的自定义协议URI,因此不适用你的场景。- 注册表路径
HKEY_CLASSES_ROOT\Extensions\ContractId\Windows.Protocol\PackageId的内容,本质上就是包清单中协议声明的映射,通过上述PackageManager方法可以直接读取到相同信息,且无需额外权限。
注意事项
- 部分应用可能声明多个自定义协议,需遍历所有符合条件的扩展项
- 若应用未声明任何自定义协议,则无法通过
LaunchUriAsync启动该应用
内容的提问来源于stack exchange,提问作者Watislav
相关产品推荐
相关产品推荐

