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


Предустановка задач

Изготовителям оборудования и МО разрешено поставлять предустановленные приложения в образе устройства. Некоторые из этих предустановленных приложений требуют выполнения задач без участия пользователя и часто до того, как конечный пользователь откроет приложение в первый раз; например, приложение для опроса продукта или регистрация SMS-сервера. Аналогичным образом, некоторым приложениям потребуется выполнить задачи обслуживания без участия пользователя после обновления приложения. Задачи предварительной установки и обновления предоставляют механизм, позволяющий выполнять задачи в фоновом режиме без установки приложения или при его обновлении.

Существует два типа задач развертывания, доступных для USP: PreInstallConfigTask и UpdateTask. Оба являются IBackgroundTasks.

Ниже приведены общие правила, управляющие этими задачами.

  • Манифест приложения может содержать только одну preInstallConfigTask и одну UpdateTask.
  • Задачи развертывания применимы к любому типу платформы.
  • Задачи развертывания могут выполняться после завершения и фиксации операции развертывания.
  • Неудачные задачи развертывания не перезапускаются.
  • Неудачные задачи развертывания не влияют на успешное развертывание приложения.
  • Задачи развертывания не перезапускаются после перезагрузки.
  • Задачи развертывания не должны зависеть друг от друга.

Примеры кода

Пример UpdateTask

Задача обновления поддерживается для любого возможного пути обновления, например:

  • С XAP до XAP
  • .xap to .appx
  • .xap to .appxbundle
  • .appx to .appx
  • .appx to .appxbundle
  • .appxbundle to .appxbundle

Ниже приведен пример appx-манифеста:

<Package>
  <Extensions>
    <Extension Category="windows.activatableClass.inProcessServer">
      <InProcessServer>
        <Path>App.dll</Path>
        <ActivatableClass ActivatableClassId="App.UpdateTask" ThreadingModel="MTA"/>
      </InProcessServer>
    </Extension>
  </Extensions>

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

Ниже приведен пример кода C#.

public sealed class UpdateTask : IBackgroundTask
{
    public async void Run(IBackgroundTaskInstance taskInstance)
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        var deferral = taskInstance.GetDeferral();
        taskInstance.Canceled +=
            (sender, reason) =>
            {
                cts.Cancel();
            };
        try
        {
            await MigrateApp(); // Do app migration/update steps.
        }
        catch (TaskCanceledException x)
        {
            // do nothing on cancelation.
        }
        deferral.Complete();
    }
}

Пример задачи PreInstallConfigTask

Ниже приведен пример appx-манифеста:

<Package>
  <Extensions>
    <Extension Category="windows.activatableClass.inProcessServer">
      <InProcessServer>
        <Path>App.dll</Path>
        <ActivatableClass ActivatableClassId="App.PreInstallConfigTask" ThreadingModel="MTA"/>
      </InProcessServer>
    </Extension>
  </Extensions>

  <Applications>
    <Application>
      <Extensions>
        <Extension Category="windows.preInstalledConfigTask"  EntryPoint=" App.PreInstallConfigTask">
        </Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

Ниже приведен пример кода C#.

public sealed class PreInstallConfigTask : IBackgroundTask
{
    public async void Run(IBackgroundTaskInstance taskInstance)
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        var deferral = taskInstance.GetDeferral();
        taskInstance.Canceled +=
            (sender, reason) =>
            {
                cts.Cancel();
            };
        try
        {
            await DownloadContactList(); // Do app migration/update steps.
        }
        catch (TaskCanceledException x)
        {
            // do nothing on cancelation.
        }
        deferral.Complete();
    }
}

Предустановка задач для классических приложений Windows

Классическим приложениям для Windows доступны три типа задач развертывания, как показано в таблице ниже. Если вы развернете классическое приложение для Windows на Windows 10, эти задачи будут работать должным образом.

Задача Описание
ПРЕДВАРИТЕЛЬНОЕ _OEM_TASK Предустановленное приложение от 1 или 2 сторон может выполняться во время установки, не требуя запуска приложения конечным пользователем.
UPDATE_TASK После обновления приложения, включая .appx до .uap, можно запустить задачу обслуживания для выполнения любых задач, связанных с миграцией, в том числе без вмешательства пользователя.
СХОДИМОСТИ Windows 8.1 и Windows 8.1 Конвергенция кода телефона. Кроме того, включите унифицированную схему манифеста APPX.