Вызов LaunchUriAsync из службы Windows не запускает приложение UWP - PullRequest
0 голосов
/ 07 октября 2019

Я сделал службу 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);
...