FindPackagesForCurrentPublisher и Package.Launch на Windows Phone

Я рассматриваю возможность создания приложения, которое сможет запускать другие мои существующие приложения, установленные пользователем на телефоне (или направлять их в магазин).

Похоже, это то, для чего предназначен 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
  • При запуске на телефоне приложение просто закрывается (даже с подключенным отладчиком).

person Ben Randall    schedule 19.12.2014    source источник
comment
Вы когда-нибудь находили решение этой проблемы?   -  person newenglander    schedule 25.01.2016
comment
К сожалению, решение состоит в том, что вы не можете использовать Package.Launch(). Он ограничен приложением, созданным Microsoft и/или партнерами. Я создал еще один ответ, который я отмечу как принятый с моим решением.   -  person Ben Randall    schedule 26.01.2016


Ответы (1)


К сожалению, хотя кажется, что вы можете получить информацию о других установленных пакетах, доступ к 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();
person Ben Randall    schedule 26.01.2016