Приложение UWP не запускается при входе в систему с помощью API StartupTask

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

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

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

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

  • В соответствии с документами отредактировал файл Package.appxmanifest, чтобы добавить пространство имен uap5, а затем узел uap5:Extension в соответствии с инструкциями, установив мой файл app .exe в свойстве Executable и Windows.FullTrustApplication в свойстве EntryPoint.

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

На этом этапе ничего не происходит, за исключением того, что указатель мыши показывает кольцо загрузки в течение полсекунды после входа в систему. Открыл средство просмотра событий 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
[...]

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

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

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

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

РЕДАКТИРОВАТЬ №2: провел еще несколько тестов с приложением Desktop Bridge. Кажется, что после того, как он не запускается, регистратор событий Windows получает еще две ошибки, перечисленные там для каждой попытки. Одна из них - это ошибка в категории «Ошибка приложения», упомянутая ранее, а другая - ошибка в категории «AppModel-Runtime» со следующей информацией:

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

ИЗМЕНИТЬ № 3: вот .appxmanifest файл для упаковочный проект. Обратите внимание, что, как упоминалось ранее, я попытался добавить задачу запуска как с использованием пространства имен desktop, так и более нового пространства имен uap5. Опять же, в обоих случаях я могу получить задачу и предложить пользователю включить ее, и я вижу ее в диспетчере задач, но приложение по-прежнему не запускается с обычной ошибкой.


person Sergio0694    schedule 16.11.2018    source источник
comment
Можете ли вы включить исключение .net? См .: stackoverflow.com/a/20358376   -  person Xiaoy312    schedule 16.11.2018
comment
@ Xiaoy312 Привет, только что снова попытался завершить работу приложения. К сожалению, я не вижу ошибок в исходном коде .NET Runtime.   -  person Sergio0694    schedule 16.11.2018
comment
Вы можете поделиться своим appxmanifest? В зависимости от того, хотите ли вы запустить компонент UWP или компонент Winforms как задачу StartUp, вам нужно будет создать расширение манифеста по-разному.   -  person Stefan Wick MSFT    schedule 19.11.2018
comment
@StefanWickMSFT Привет, я добавил новую правку в свой вопрос с полным кодом для файла Package.appxmanifest, надеюсь, он предоставит полезную информацию. Я всегда хочу сначала запустить приложение UWP, компонент Win32 - это всего лишь небольшая программа, которую я запускаю после завершения загрузки приложения с использованием FullTrustProcessLauncher API. Спасибо за вашу помощь!   -  person Sergio0694    schedule 19.11.2018
comment
Как написан ваш манифест, StartupTask попытается запустить компонент Win32. Если вы хотите запустить UWP, вам нужно будет создать расширение по-другому. Посмотрите этот документ в разделе docs расширения задачи запуска приложения UWP. microsoft.com/en-us/uwp/api/   -  person Stefan Wick MSFT    schedule 19.11.2018
comment
@StefanWickMSFT Хорошо, что сработало, большое вам спасибо! ???? Я предположил, что абзац о запуске приложения UWP предназначен только для автономных приложений UWP, с этим расширением в их собственном .appxmanifest файле, было неясно, может ли его вместо этого также использоваться в манифесте пакета. Вы можете записать это как ответ, если хотите, чтобы я пометил его как действительный!   -  person Sergio0694    schedule 19.11.2018
comment
Хорошо, приятно слышать, что вы разблокированы. Я разместил это как ответ здесь сейчас, для тех, кто увидит этот вопрос в будущем. Пожалуйста, отметьте как отвеченный.   -  person Stefan Wick MSFT    schedule 19.11.2018


Ответы (1)


При настройке расширения 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>
person Stefan Wick MSFT    schedule 19.11.2018
comment
Спасибо еще раз! Это отлично сработало для запуска приложения UWP, которое затем, в свою очередь, запускает программу Win32 самостоятельно с FullTrustProcessLauncher API, как упоминалось ранее. Я действительно хочу предположить, что было бы неплохо немного расширить документы и, возможно, добавить пару заметок о упакованных приложениях UWP, как в этом случае. В настоящее время в документации проводится различие только между автономными приложениями UWP и Bridge, поэтому правильное место для объявления задачи не совсем понятно. Я понимаю, что Desktop Bridge в первую очередь предназначен для использования наоборот (с Win32 на UWP), но все же. - person Sergio0694; 19.11.2018
comment
Хорошая обратная связь - в целом наша сегодняшняя документация не очень хорошо описывает смешанные пакеты, которые содержат компоненты UWP и Win32. К вашему сведению - наши документы также имеют возможность внизу отправить прямой отзыв по соответствующей теме. Спасибо! - person Stefan Wick MSFT; 19.11.2018
comment
Да, пару дней назад я уже оставлял прямой отзыв об этой StartupTask странице документов, рад помочь! ???? - person Sergio0694; 19.11.2018