UWP アプリが更新された際のバックグラウンド タスクの実行

ユニバーサル Windows プラットフォーム (UWP) ストア アプリの更新後に実行されるバックグラウンド タスクを記述する方法について説明します。

更新タスクのバックグラウンド タスクは、ユーザーがデバイスにインストールされているアプリに更新プログラムをインストールした後、オペレーティング システムによって呼び出されます。 これにより、ユーザーが更新されたアプリを起動する前に、アプリで新しいプッシュ通知チャネルの初期化、データベース スキーマの更新などの初期化タスクを実行できます。

更新タスクは、 ServicingComplete トリガーを使用してバックグラウンド タスクを起動するのとは異なります。その場合、 ServicingComplete トリガーによってアクティブ化されるバックグラウンド タスクを登録するには、更新前にアプリを少なくとも 1 回実行する必要があるためです。 更新タスクは登録されていないため、一度も実行されていないがアップグレードされたアプリでは、更新タスクが引き続きトリガーされます。

手順 1: バックグラウンド タスク クラスを作成する

他の種類のバックグラウンド タスクと同様に、更新タスクのバックグラウンド タスクを Windows ランタイム コンポーネントとして実装します。 このコンポーネントを作成するには、「バックグラウンド タスク クラスの作成」セクションの手順に従って、プロセス外のバックグラウンド タスクを登録します。 これには次の手順が含まれます。

  • ソリューションに Windows ランタイム コンポーネント プロジェクトを追加する。
  • アプリからコンポーネントへの参照を作成する。
  • IBackgroundTask を実装するコンポーネントに、パブリックなシール クラスを作成します。
  • Run メソッドを実装します。これは、更新タスクの実行時に呼び出される必須のエントリ ポイントです。 バックグラウンド タスクから非同期呼び出しを行う場合は、プロセス外のバックグラウンド タスクを作成して登録しますRun メソッドで遅延を使用する方法について説明します。

更新タスクを使用するには、このバックグラウンド タスクを登録する必要はありません ( 作成とプロセス外のバックグラウンド タスクの登録 トピックの「バックグラウンド タスクを登録する」セクション)。 これは、タスクを登録するためにアプリにコードを追加する必要がなく、バックグラウンド タスクを登録するために更新される前にアプリを少なくとも 1 回実行する必要がないため、更新タスクを使用する主な理由です。

次のサンプル コードは、C# の Update Task バックグラウンド タスク クラスの基本的な開始点を示しています。 バックグラウンド タスク クラス自体と、バックグラウンド タスク プロジェクト内の他のすべてのクラスは、 publicsealedする必要があります。 バックグラウンド タスク クラスは、 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を右クリックし、View Code をクリックしてパッケージ マニフェストを表示します。 次の <Extensions> XML を追加して、更新タスクを宣言します。

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

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

上記の XML では、 EntryPoint 属性が更新タスク クラスの namespace.class 名に設定されていることを確認します。 名前の大文字と小文字は区別されます。

手順 3: 更新タスクをデバッグ/テストする

更新するものが存在するように、アプリがコンピューターにデプロイされていることを確認します。

バックグラウンド タスクの Run() メソッドにブレークポイントを設定します。

ブレークポイントの設定

次に、ソリューション エクスプローラーで(バックグラウンド タスク プロジェクトではなく) アプリのプロジェクトを右クリックし、 Properties をクリックします。 アプリケーション プロパティ ウィンドウで、左側の Debug をクリックし、 [起動しない] を選択し、起動時にコードをデバッグします

デバッグ設定を設定する

次に、UpdateTask がトリガーされるようにするには、パッケージのバージョン番号を増やします。 ソリューション エクスプローラーで、アプリの Package.appxmanifest ファイルをダブルクリックしてパッケージ デザイナーを開き、Build 番号を更新します。

バージョンを更新する

これで、Visual Studio 2019 で F5 キーを押すと、アプリが更新され、システムによってバックグラウンドで UpdateTask コンポーネントがアクティブ化されます。 デバッガーはバックグラウンド プロセスに自動的にアタッチされます。 ブレークポイントがヒットし、更新コード ロジックをステップ実行できます。

バックグラウンド タスクが完了したら、同じデバッグ セッション内の Windows スタート メニューからフォアグラウンド アプリを起動できます。 デバッガーは再び自動的にアタッチされ、今度はフォアグラウンド プロセスにアタッチされ、アプリのロジックをステップ実行できます。

Note

Visual Studio 2015 ユーザー: 上記の手順は Visual Studio 2017 または Visual Studio 2019 に適用されます。 Visual Studio 2015 を使用している場合は、同じ手法を使用して UpdateTask をトリガーおよびテストできます。ただし、Visual Studio はそれにアタッチされません。 VS 2015 の別の手順として、UpdateTask をエントリ ポイントとして設定し、フォアグラウンド アプリから直接実行をトリガーする ApplicationTrigger を設定します。

関連項目

アウトプロセス バックグラウンド タスクの作成と登録