Windows 10 for PC中的FindPackagesForCurrentPublisher

时间:2016-08-02 13:17:01

标签: c# uwp pc

有没有办法使用InstallationManager.FindPackagesForCurrentPublisher替代?看起来它只适用于手机。

我知道您可以通过creating and then launching a URI启动应用,但我需要知道我要启动的应用是否已安装。

修改 我要发布的应用是由同一个发布商。

1 个答案:

答案 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();