プレインストール タスク
OEM と MO は、デバイス イメージにアプリをプレインストールして出荷することができます。 製品調査アプリや SMS サーバーの登録など、これらのプレインストールされたアプリの一部は、ユーザーの操作なしで、多くの場合エンドユーザーが初めてアプリを開く前にタスクを実行する必要があります。 同様に、一部のアプリでは、アプリの更新後にユーザーの操作なしでサービス タスクが実行される必要があります。 プレインストール タスクと更新タスクを使用すると、アプリをインストールする前や更新する前に、バックグラウンドでタスクを実行できるメカニズムが提供されます。
UAP には、PreInstallConfigTask と UpdateTask という 2 種類の展開タスクを使用できます。 どちらも IBackgroundTask です。
これらのタスクを管理する一般的な規則を次に示します。
- アプリ マニフェストには、PreInstallConfigTask と UpdateTask をそれぞれ 1 つだけ含めることができます。
- 展開タスクは、任意のプラットフォームの種類に適用できます。
- 展開タスクは、展開操作が完了してコミットされた後で実行できます。
- 失敗した展開タスクが開始し直されることはありません。
- 失敗した展開タスクが、アプリの正常な展開に影響を与えることはありません。
- 再起動後に展開タスクが開始し直されることはありません。
- 展開タスクは、別のタスクに依存してはなりません。
コード例
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 アプリでは 3 種類の展開タスクを使用できます。 Windows 10 に従来の Windows アプリを展開する場合、これらのタスクは意図したとおりに動作します。
タスク | 説明 |
---|---|
PREINSTALL _OEM_TASK | ファースト パーティまたはセカンド パーティがプレインストールしたアプリは、エンド ユーザーがアプリを起動する必要なく、インストール時のタスクで実行できます。 |
UPDATE_TASK | アプリが更新された後 (.appx から .uap など)、やはりユーザーの操作を必要とせずに、サービス タスクを実行して移行関連のタスクを実行できます。 |
CONVERGENCE | Windows 8.1 と Windows 8.1 Phone のコードの収束。 また、統合 .appx マニフェスト スキーマも有効になります。 |