FindPackagesForCurrentPublisher in Windows 10 for PC

本文关键字:for PC Windows in FindPackagesForCurrentPublisher | 更新日期: 2023-09-27 18:00:01

是否有使用InstallationManager.FindPackagesForCurrentPublisher的方法或替代方法?它看起来只适用于手机。

我知道你可以通过创建然后启动URI来启动应用程序,但我需要知道我想启动的应用程序是否安装了。

编辑:我要启动的应用程序是由同一发行商发行的。

FindPackagesForCurrentPublisher in Windows 10 for PC

如果我们使用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();