You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取微软商店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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:10:58