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


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

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

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

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

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

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

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

Эту фоновую задачу не нужно зарегистрировать (раздел "Регистрация фоновой задачи для выполнения" в разделе "Создание и регистрация внепроцессной фоновой задачи") для использования задачи обновления. Это основная причина использования задачи обновления, так как вам не нужно добавлять в приложение код, чтобы зарегистрировать задачу, и приложению не нужно запускать по крайней мере один раз, прежде чем обновлять фоновую задачу.

В следующем примере кода показана базовая отправная точка для класса фоновой задачи update в 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 приложения, чтобы открыть конструктор пакетов, а затем обновите номер сборки:

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

Теперь при нажатии клавиши 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 в качестве точки входа и активирует выполнение непосредственно из приложения переднего плана.

См. также

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