共用方式為


預先安裝工作

OEM 和 IO 允許在裝置映射中寄送預先安裝的應用程式。 其中一些預先安裝的應用程式需要在沒有使用者互動的情況下執行工作,而且通常會在使用者第一次開啟應用程式之前執行;例如產品問卷應用程式或 SMS 伺服器註冊。 同樣地,某些應用程式需要在更新應用程式之後,不需要使用者互動就能執行維護工作。 預先安裝及更新工作提供機制,讓工作在安裝應用程式之前或在更新之前,在背景中執行。

UAP 有兩種可用的部署工作類型:PreInstallConfigTask 和 UpdateTask。 兩者都是 IBackgroundTasks。

以下是治理這些工作的一般規則。

  • 您的應用程式資訊清單只能包含一個 PreInstallConfigTask 和一個 UpdateTask。
  • 部署工作適用于任何平臺類型。
  • 部署工作可以在部署作業完成並認可之後執行。
  • 未重新開機失敗的部署工作。
  • 失敗的部署工作不會影響應用程式的成功部署。
  • 部署工作不會在重新開機後重新開機。
  • 部署工作不應彼此相依。

程式碼範例

UpdateTask 範例

任何可能的更新路徑都支援更新工作,例如:

  • .xap 至 .xap
  • .xap 至 .appx
  • .xap 至 .appxbundle
  • .appx 至 .appx
  • .appx 至 .appxbundle
  • .appxbundle 至 .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 10上部署傳統 Windows 應用程式,這些工作會如預期般運作。

Task 描述
PREINSTALL _OEM_TASK 第 1 方或第二方預先安裝應用程式可以在安裝時間工作執行,而不需要使用者啟動應用程式。
UPDATE_TASK 應用程式更新後,包括 .appx 至 .uap 之後,即可執行維護工作來執行任何移轉相關工作,而不需要任何使用者互動。
收斂 Windows 8.1和Windows 8.1電話程式碼聚合。 此外,啟用統一的 .appx 資訊清單架構。