我正在考虑制作一个应用程序,该应用程序将能够在用户在手机上安装的一个或多个其他现有应用程序上启动(或将他们定向到商店(。
看起来这就是FindPackagesForCurrentPublisher的用途,但我似乎无法让它工作。 为了测试这一点,我安装了我的"中心"应用程序和两个"目标"应用程序。 查找包...返回 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);
但是,我似乎总是得到一个错误。
- 在模拟器中运行时,我收到访问违规异常
- 在手机上运行时,应用程序会关闭(即使连接了调试器(。
不幸的是,虽然您似乎可以获取有关其他已安装软件包的信息,但对 Package.Launch(( API 的访问仅限于由Microsoft和/或Microsoft合作伙伴创建的应用程序。
为了解决这个问题,我更新了原始应用程序以注册 URI 处理程序,方法是在我的 WMAppManifest 中放置类似以下内容.xml:
<Extensions>
<Protocol Name="myapphandler" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
</Extensions>
然后,从将要启动它的中心应用程序中,我可以执行以下操作:
var launcherTask = Launcher.LaunchUriAsync(new Uri("dominionpicker:DominionPickerLauncher")).AsTask();
launcherTask.Wait();