0

我正在考虑制作一个应用程序,该应用程序能够启动用户在手机上安装的我现有的一个或多个应用程序(或将它们引导到商店)。

看起来这确实是 FindPackagesForCurrentPublisher 的用途,但我似乎无法让它工作。为了测试这一点,我安装了我的“集线器”应用程序和两个“目标”应用程序。FindPackages... 返回 3 个应用程序的预期列表。

作为最简单的示例,我的代码如下所示:

var packages = InstallationManager.FindPackagesForCurrentPublisher();
// Real code verifies that I'm pointing to the app I want
var package = packages.First();
package.Launch(string.Empty);

但是,我似乎总是遇到错误。

  • 在模拟器中运行时,我得到 AccessViolationException
  • 在手机上运行时,应用程序只是关闭(即使连接了调试器)。
4

1 回答 1

1

不幸的是,虽然您确实可以获取有关其他已安装软件包的信息,但对 Package.Launch() API 的访问仅限于 Microsoft 和/或 Microsoft 合作伙伴创建的应用程序。

为了解决这个问题,我通过在我的 WMAppManifest.xml 中添加类似这样的内容来更新原始应用程序以注册 URI 处理程序:

<Extensions>
  <Protocol Name="myapphandler" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
</Extensions>

然后从将要启动它的中心应用程序中,我可以执行以下操作:

var launcherTask = Launcher.LaunchUriAsync(new Uri("dominionpicker:DominionPickerLauncher")).AsTask();
launcherTask.Wait();
于 2016-01-26T19:21:15.547 回答