判断某个 UWP 程序是否已经安装
在一些代码逻辑里,经常需要判断指定的 UWP程序是否已经安装,其实微软已经提供了相应的API了,无论是Win32还是原生的 UWP程序都可以直接使用,这就是 PackageManager,其文档地址见这里。
但是这个类,微软给添加了一个标记 [Windows.Foundation.Metadata.WebHostHidden],所以如果是网页里就无法调用了。为了规避掉这个问题,发现了一个类似hack 的方式。
就是使用 QueryUriSupportAsync 方法,向请求的UWP程序发送一个不存在的协议字符串,然后检查其返回值。返回的是一个枚举类型,也就是说,如果是 0(已安装)或者3(不支持该协议),就表明这个程序对于当前用户来说是已安装的。
下面是一段 js 的调用示例代码:
static queryUriSupport(uri, packageName) {
return Windows.System.Launcher.queryUriSupportAsync(
new Windows.Foundation.Uri(uri),
0,
packageName
);
}
简单、暴力、直接,恰好解决了网页里的权限问题。