有没有办法使用InstallationManager.FindPackagesForCurrentPublisher替代?看起来它只适用于手机。
我知道您可以通过creating and then launching a URI启动应用,但我需要知道我要启动的应用是否已安装。
修改 我要发布的应用是由同一个发布商。
答案 0 :(得分:1)
如果我们使用LaunchUriAsync(Uri)
方法启动应用,系统将首先尝试启动已注册此协议的已安装应用,如果未安装目标应用,则会打开应用商店应用并显示推荐的应用程序注册此协议。
FindPackagesForCurrentPublisher
方法只能找到与您的应用具有相同发布商ID的应用包,对于不属于同一发布商的其他应用,您需要使用FindPackages method,此方法需要ID_CAP_OEM_DEPLOYMENT
。对于桌面,现在没有方法,你需要特殊的访问才能完成这项工作,否则你就无法打破UWP app的沙盒。
但是如果您的应用程序未能发布到商店中,则有一种方法可以使用PackageManager class来查找已安装的软件包。要使用此课程,您需要在应用的清单中添加packageManagement
功能,如下所示:
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="packageManagement" />
</Capabilities>
</Package>
对于此功能,您可以参考Special and restricted capabilities。
最后,您可以在应用中使用此类,例如列出所有已安装的软件包:
var packageManager = new PackageManager();
IEnumerable<Windows.ApplicationModel.Package> packages = (IEnumerable<Windows.ApplicationModel.Package>)packageManager.FindPackagesForUser("");
var list = packages.ToList();