FindPackagesForCurrentPublisher in Windows 10 for PC
本文关键字:for PC Windows in FindPackagesForCurrentPublisher | 更新日期: 2023-09-27 18:00:01
是否有使用InstallationManager.FindPackagesForCurrentPublisher的方法或替代方法?它看起来只适用于手机。
我知道你可以通过创建然后启动URI来启动应用程序,但我需要知道我想启动的应用程序是否安装了。
编辑:我要启动的应用程序是由同一发行商发行的。
如果我们使用LaunchUriAsync(Uri)
方法来启动应用程序,系统将首先尝试启动注册了该协议的已安装应用程序,如果目标应用程序没有安装,则会打开Store应用程序,并显示注册该协议的推荐应用程序。
FindPackagesForCurrentPublisher
方法只能找到与您的应用具有相同发布者ID的应用程序包,对于不具有相同发布器的其他应用程序,您需要使用FindPackages方法,而此方法需要ID_CAP_OEM_DEPLOYMENT
。对于桌面,现在没有任何方法,你需要特殊的访问权限才能完成这项工作,否则你无法打破UWP应用程序的沙盒。
但是,如果你的应用程序不会发布到Store中,那么有一种方法可以使用PackageManager类来查找安装的包。要使用此类,您需要将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>
有关此功能,您可以参考特殊和受限功能。
最后你可以在你的应用程序中使用这个类,例如列出所有安装的软件包:
var packageManager = new PackageManager();
IEnumerable<Windows.ApplicationModel.Package> packages = (IEnumerable<Windows.ApplicationModel.Package>)packageManager.FindPackagesForUser("");
var list = packages.ToList();