Я сделал службу Windows, которая должна запускать приложение UWP с определенного события. Подход, который я использовал, заключается в расширении протокола приложения UWP. Я читал об этом подходе здесь
Я проверил, что URI работает, введя строку URI в адресную строку проводника (например, «myapp:», «myapp: // test»). ), но когда я попробовал их в службе Windows, я получил возвращаемое значение успеха, но приложение UWP никогда не запускалось.
Моя функция для вызова выглядит так:
async private void LaunchApp()
{
WriteToFile("Launchapp function");
try
{
uri = new Uri(@"myapp://test");
WriteToFile("URI created");
var success = await Launcher.LaunchUriAsync(uri);
if (success)
{
WriteToFile("URI Launched");
}
else
{
WriteToFile("URI Launch Failed");
}
}catch (ArgumentNullException ane)
{
WriteToFile("ANE exception");
}
catch (UriFormatException ufe)
{
WriteToFile("UFE exception");
}
}
Я обеспокоен тем, что API LaunchUriAsync может не увидеть пакет из-за отделения службы от рабочего стола пользователя. Но я пока не смог подтвердить это.
Update
: я запустил свой сервис через консольное приложение с подключенным отладчиком и точками останова при вызове функции. UWP был успешно открыт. Хотя это положительное наблюдение, мой сервис не должен запускаться таким образом.
Update 2
: Я забыл упомянуть, что процесс запуска кода отладки и рабочей версии отличается. Отладочный код, где приложение UWP было запущено без проблем, выглядит следующим образом:
WindowsService service1 = new WindowsService ();
service1.TestStartupAndStop(args); // calls this.OnStart(), sleeps for 2 secs, then calls this.OnStop()
Мой рабочий код просто запускается с помощью ServiceBase
, например:
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new WindowsService ()
};
ServiceBase.Run(ServicesToRun);