Приложение UWP не запускается при входе в систему с помощью API-интерфейсов StartupTask - PullRequest
0 голосов
/ 16 ноября 2018

ПРИМЕЧАНИЕ : я уже посмотрел этот связанный вопрос, это не дубликат

Я работаю над приложением UWP, которое также использует Desktop Bridge (пакет приложения содержит приложение UWP и компонент WinForms), и пытаюсь добавить функцию автоматического запуска, но пока безуспешно.

Вот что я сделал:

  • Некоторые исследования.Посмотрел этот вопрос, упомянутый ранее, этот пост в блоге от MS , а также официальные документы .

  • Затем следуйте документам, отредактировав файл Package.appxmanifest, добавив пространство имен uap5, а затем узел uap5:Extension в соответствии с инструкциями, установив файл .exe моего приложения в свойстве Executable и Windows.FullTrustApplication в EntryPoint.property.

  • Bonus : на всякий случай я также попытался заменить пространство имен uap5 на desktop, поскольку некоторые примеры кода использовали его вместо этого.Тот же результат, приложение не запускается вообще.
  • Включены API для получения задачи запуска и запроса на ее настройку.
  • Развернул приложение, приступил к использованию этих API, получилв окне подтверждения и нажмите «Разрешить».
  • Открыл управляемую задачу и дважды проверил, что имя приложения было там на вкладке «Автозагрузка», а рядом с ним правильно отображается метка «Включено».
  • Выйдите из системы и вернитесь обратно

В этот момент ничего не происходит, за исключением того, что указатель мыши показывает загрузочное кольцо в течение полсекунды после входа в систему. Открыл окно просмотра событий Windows и обнаружил ошибку,что указывало на неудачный автоматический запуск приложения.Попытка повторилась несколько раз и достаточно точно, каждый раз, когда приложение не запускалось, и в программе просмотра событий появлялась другая идентичная ошибка.Это информация об ошибке:

Application name: <my app>.exe, versione: 1.0.0.0, timestamp: 0x5a68410c
Module: KERNELBASE.dll, versione: 10.0.17134.407, timestamp: 0x99042cc0
Exception code: 0xe0434352
Offset: 0x000000000003a388
Process ID: 0x1c4c
Path: C:\Users\<my username>\Documents\GitHub\<my app>\<my app>.Package\bin\x64\Debug\AppX\<my app>.exe
Module path: C:\Windows\System32\KERNELBASE.dll
[...]

Я не уверен, что я делаю здесь не так, я пошагово следовал за документами и вижу приложение, перечисленное в диспетчере задач, ноон просто не запускается таким образом.

Любая помощь будет признательна, спасибо заранее!10

EDIT : похоже, проблема связана с функциональностью Desktop Bridge.У меня есть приложение UWP и проект упаковки, и я добавил задачу запуска в оба файла .appxmanifest (с разными идентификаторами).Я делаю это, используя проект упаковки для создания сборок x86 / x64 и проект UWP непосредственно для сборок ARM / ARM64.

Если я разверну только приложение UWP (автономное, без пакета) и включу задачу запуска, приложение будет работать нормально.Но если я разверну пакетный проект и включу эту задачу запуска, запуск завершится неудачно.Я вижу задачу запуска в диспетчере задач в обоих случаях.Как упоминалось ранее, когда задача запуска завершается неудачно для проекта упаковки, я вижу эти ошибки в средстве просмотра событий.

EDIT # 2 : провел еще несколько тестов с приложением Desktop Bridge.Кажется, что после того, как он не запускается, регистратор событий Windows получает еще две ошибки, перечисленные там для каждой попытки.Одна из них - ошибка в категории «Ошибка приложения», упомянутая ранее, а другая - ошибка в категории «AppModel-Runtime» со следующей информацией:

Сбой при изменении состояния приложения AppModel 0x490 при изменении 0x490для пакета для пользователя (текущий статус = 0x0, желаемый статус = 0x20).

EDIT # 3 : по запросу, вот файл .appxmanifest для проекта упаковки.Обратите внимание, что, как упоминалось ранее, я попытался добавить задачу запуска как с использованием пространства имен desktop, так и более нового пространства имен uap5.Опять же, в обоих случаях я могу получить задачу и предложить пользователю включить ее, и я вижу ее в диспетчере задач, но приложение по-прежнему не запускается с обычной ошибкой.

1 Ответ

0 голосов
/ 19 ноября 2018

При настройке расширения StartupTask в вашем appxmanifest важно понимать, что объявление отличается для компонентов Win32 и компонентов UWP. Это задокументировано здесь: https://docs.microsoft.com/en-us/uwp/api/Windows.ApplicationModel.StartupTask

Компоненты UWP:

<Package xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5" ...>
...
<Applications>
    <Application ...>
        ...
        <Extensions>
          <uap5:Extension Category="windows.startupTask">
            <uap5:StartupTask
              TaskId="MyStartupId"
              Enabled="false"
              DisplayName="Test startup" />
          </uap5:Extension>
      </Extensions>
    </Application>
</Applications>

Компоненты Win32:

<Package xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"...>
...
<Applications>
    <Application ...>
        ...
        <Extensions>
          <uap5:Extension
            Category="windows.startupTask"
            Executable="MyDesktopBridgeApp.exe"
            EntryPoint="Windows.FullTrustApplication">
            <uap5:StartupTask
              TaskId="MyStartupId"
              Enabled="false"
              DisplayName="My Desktop Bridge App" />
          </uap5:Extension>
        </Extensions>
    </Application>
</Applications>
...