Поделиться через


Запуск фоновой задачи при обновлении приложения UWP

Узнайте, как записать фоновую задачу, которая выполняется после обновления приложения Магазина универсальной платформы Windows (UWP).

Фоновая задача обновления запускается операционной системой после того, как пользователь устанавливает обновление для приложения, установленного на устройстве. Это позволяет приложению выполнять задачи инициализации, например инициализировать новый канал push-уведомлений, обновить схему базы данных и пр., прежде чем пользователь запустит обновленное приложение.

Задача обновления отличается от запуска фоновой задачи, используя триггер ServicingComplete, так как в этом случае необходимо однократно запустить ваше приложение по крайней мере до обновления для регистрации фоновой задачи, которая будет активирована триггером ServicingComplete. Задача обновления регистрируется, и таким образом приложение, которое никогда не запускалось, но которое было обновлено, по-прежнему будет иметь триггер задачи обновления.

Шаг 1. Создание класса фоновой задачи

Как и другие типы фоновых задач, фоновая задача обновления реализуется в компоненте среды выполнения Windows. Чтобы создать такой компонент, выполните действия из подраздела Создание класса фоновой задачи раздела Создание и регистрация фоновой задачи. Для этого нужно выполнить следующие действия:

  • Добавление проекта компонента среда выполнения Windows в решение.
  • Создание ссылки из этого приложения на компонент.
  • Создание открытого, запечатанного класса в компоненте, который реализует IBackgroundTask.
  • Реализация метода Run, который является обязательной точкой входа, которая вызывается при запуске задачи обновления. Если вы собираетесь выполнять асинхронные вызовы из фоновой задачи, в статье Создание и регистрация внепроцессной фоновой задачи объясняется, как использовать задержку в вашем методе Run.

Вам не нужно зарегистрировать эту фоновую задачу (в разделе «Зарегистрировать фоновую задачу для запуска» Создание и регистрация out-of-process фоновую задачу раздел) для использования задачи обновления. Это основная причина для использования задачу обновления, так как вам не нужно добавлять никакой код в приложение для регистрации задачи, и у приложения нет запуск по крайней мере один раз перед обновлением для регистрации фоновой задачи.

В следующем примере кода показана простая отправная точка для класса фоновой задачи Update Task в C#. Класс фоновой задачи и все остальные классы в фоновой задаче должны быть открытыми и запечатанными классами. Класс вашей фоновой задачи должен быть производным от IBackgroundTask и иметь общее Run() метод с подписью, показано ниже:

using Windows.ApplicationModel.Background;

namespace BackgroundTasks
{
    public sealed class UpdateTask : IBackgroundTask
    {
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            // your app migration/update code here
        }
    }
}

Шаг 2. Объявление фоновой задачи в манифесте пакета.

В обозревателе решений Visual Studio щелкните правой кнопкой мыши Package.appxmanifest и выберите пункт Перейти к коду, чтобы просмотреть манифест пакета. Добавьте следующий <Extensions>XML для объявления вашей задачи обновления:

<Package ...>
    ...
  <Applications>  
    <Application ...>  
        ...
      <Extensions>  
        <Extension Category="windows.updateTask"  EntryPoint="BackgroundTasks.UpdateTask">  
        </Extension>  
      </Extensions>

    </Application>  
  </Applications>  
</Package>

Убедитесь, что в приведенном выше XML атрибут EntryPoint имеет значение namespace.class имя класса задач обновление. В нем учитывается регистр.

Шаг 3. Отладка и тестирование задачи обновления

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

Установите точку останова в методе Run() фоновой задачи.

Установка точки останова

Далее, в обозревателе решений щелкните правой кнопкой мыши проект приложения (не фоновой задаче) и нажмите кнопку Свойства. В окне "Свойства приложения" щелкните Отладка слева, а затем выберите Не запускать, а отлаживать мой код при открытии:

задать параметры отладки

Затем, чтобы убедиться, что UpdateTask запускается, увеличьте номер версии пакета. В обозревателе решений дважды щелкните ваше приложение Package.appxmanifest файла, чтобы открыть конструктор пакетов, а затем обновите номер Build:

обновление версии

Теперь при нажатии клавиши F5 в Visual Studio 2019 приложение будет обновлено, а система активирует компонент UpdateTask в фоновом режиме. Отладчик автоматически назначается фоновый процесс. Ваш останов будет достигнут, и вы можете выполнять свою логику для обновления кода.

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

Примечание

Пользователи Visual Studio 2015. Описанные выше действия применимы к Visual Studio 2017 или Visual Studio 2019. Если вы используете Visual Studio 2015, можно использовать те же методы для вызова и тестирования UpdateTask, за исключением Visual Studio, к которому это не цепляется. Альтернативная процедура в VS 2015 является настройка ApplicationTrigger, устанавливающего UpdateTask как точку входа, и вызывает триггер выполнения непосредственно из приложения переднего плана.

См. также раздел

Создание и регистрация внепроцессной фоновой задачи