UWP アプリが更新された際のバックグラウンド タスクの実行Run a background task when your UWP app is updated

ユニバーサル Windows プラットフォーム (UWP) アプリが更新された後に実行されるバックグラウンド タスクの作成方法を説明します。Learn how to write a background task that runs after your Universal Windows Platform (UWP) store app is updated.

更新タスク バックグラウンド タスクは、ユーザーがデバイスにインストールされるアプリに更新プログラムをインストールした後、オペレーティング システムによって呼び出されます。The Update Task background task is invoked by the operating system after the user installs an update to an app that is installed on the device. これによって、更新されたアプリをユーザーが起動する前に、アプリで新しいプッシュ通知チャネルの初期化やデータベース スキーマの更新などの初期化タスクを実行できます。This allows your app to perform initialization tasks such as initializing a new push notification channel, updating database schema, and so on, before the user launches your updated app.

更新タスクは、ServicingComplete トリガーを使用してバックグラウンド タスクを起動することとは異なります。それは、トリガーを使用する場合、アプリが更新される前にアプリが少なくとも 1 回は実行されて、ServicingComplete トリガーによってアクティブ化されるバックグラウンド タスクが登録されている必要があるからです。The Update Task differs from launching a background task using the ServicingComplete trigger because in that case your app must run at least once before it is updated in order to register the background task that will be activated by the ServicingComplete trigger. 更新タスクは登録されないので、1 回も実行されずにアップグレードされたアプリでも更新タスクはトリガーされます。The Update Task isn't registered and so an app that has never been run, but that is upgraded, will still have its update task triggered.

手順 1: バックグラウンド タスク クラスを作るStep 1: Create the background task class

他の種類のバックグラウンド タスクの場合と同様に、Windows ランタイム コンポーネントとして更新タスク バックグラウンド タスクを実装します。As with other types of background tasks, you implement the Update Task background task as a Windows Runtime component. このコンポーネントを作成するには、「アウトプロセス バックグラウンド タスクの作成と登録」の「バックグラウンド タスク クラスを作る」セクションの手順に従ってください。To create this component, follow the steps in the Create the Background Task class section of Create and register an out-of-process background task. これには次の手順が含まれます。The steps include:

  • Windows ランタイムコンポーネントプロジェクトをソリューションに追加しています。Adding a Windows Runtime component project to your solution.
  • アプリからコンポーネントへの参照を作成する。Creating a reference from your app to the component.
  • IBackgroundTask を実装するコンポーネント内の public sealed クラスを作成する。Creating a public, sealed class in the component that implements IBackgroundTask.
  • 更新タスクの実行時に呼び出される必要なエントリ ポイントである Run メソッドを実装する。Implementing the Run method, which is the required entry point that is called when the Update Task is run. バックグラウンド タスクからの非同期呼び出しを作成する場合は、「アウトプロセス バックグラウンド タスクの作成と登録」で Run メソッドでの遅延の使用方法を説明しています。If you are going to make asynchronous calls from your background task, Create and register an out-of-process background task explains how to use a deferral in your Run method.

更新タスクを使用するうえで、このバックグラウンド タスクの登録 (「アウトプロセス バックグラウンド タスクの作成と登録」 トピックの「実行するバックグラウンド タスクを登録する」セクション) は不要です。You don't need to register this background task (the "Register the background task to run" section in the Create and register an out-of-process background task topic) to use the Update Task. 更新タスクを使用する主な理由は、タスクを登録するためにコードをアプリに追加する必要がないこと、およびアプリの更新前にアプリを少なくとも 1 回実行してバックグラウンド タスクを登録する必要がないことです。This is the main reason to use an Update Task because you don't need to add any code to your app to register the task and the app doesn't have to at least run once before being updated to register the background task.

次のサンプル コードは、C# の更新タスク バックグラウンド タスク クラスの基本的な開始点を示しています。The following sample code shows a basic starting point for a Update Task background task class in C#. バックグラウンド タスク クラス自体と、バックグラウンド タスク プロジェクト内のその他すべてのクラスは、public****sealed クラスである必要があります。The background task class itself - and all other classes in the background task project - need to be public and sealed. バックグラウンド タスク クラスは IBackgroundTask から派生する必要があり、以下に示すシグネチャを持つパブリック Run() メソッドが含まれている必要があります。Your background task class must derive from IBackgroundTask and have a public Run() method with the signature shown below:

using Windows.ApplicationModel.Background;

namespace BackgroundTasks
{
    public sealed class UpdateTask : IBackgroundTask
    {
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            // your app migration/update code here
        }
    }
}

手順 2: パッケージ マニフェストでバックグラウンド タスクを宣言するStep 2: Declare your background task in the package manifest

Visual Studio のソリューション エクスプローラーで、Package.appxmanifest を右クリックし、[コードの表示] をクリックして、パッケージ マニフェストを表示します。In the Visual Studio Solution Explorer, right-click Package.appxmanifest and click View Code to view the package manifest. 次の <Extensions> XML を追加して更新タスクを宣言します。Add the following <Extensions> XML to declare your update task:

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

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

上記の XML で、EntryPoint 属性が更新タスク クラスの <名前空間>.<クラス> 名となるように設定します。In the XML above, ensure that the EntryPoint attribute is set to the namespace.class name of your update task class. 名前の大文字と小文字は区別されます。The name is case-sensitive.

手順 3: 更新タスクをデバッグ/テストするStep 3: Debug/test your Update task

アプリを PC に展開して、更新対象を用意します。Ensure that you have deployed your app to your machine so that there is something to update.

バックグラウンド タスクの Run() メソッドにブレークポイントを設定します。Set a breakpoint in the Run() method of your background task.

ブレークポイントの設定

次に、ソリューション エクスプローラーで、アプリのプロジェクト (バックグラウンド タスクのプロジェクトではない) を右クリックし、[プロパティ] をクリックします。Next, in the solution explorer, right-click your app's project (not the background task project) and then click Properties. アプリケーションの [プロパティ] ウィンドウで、左側の [デバッグ] をクリックし、[起動しないが、開始時にコードをデバッグ] を選択します。In the application Properties window, click Debug on the left, then select Do not launch, but debug my code when it starts:

デバッグ設定の設定

次に、UpdateTask がトリガーされるように、パッケージのバージョン番号を増やします。Next, to ensure that the UpdateTask is triggered, increase the package's version number. ソリューション エクスプローラーで、アプリの Package.appxmanifest ファイルをダブルクリックして、パッケージ デザイナーを開き、[ビルド] 番号を更新します。In the Solution Explorer, double-click your app's Package.appxmanifest file to open the package designer, and then update the Build number:

バージョンの更新

これで、Visual Studio 2019 で F5 キーを押すと、アプリが更新され、バックグラウンドで UpdateTask コンポーネントがアクティブ化されます。Now, in Visual Studio 2019 when you press F5, your app will be updated and the system will activate your UpdateTask component in the background. デバッガーは自動的にバックグラウンド プロセスにアタッチします。The debugger will automatically attach to the background process. ブレークポイントに到達すると、更新コード ロジックをステップ実行できます。Your breakpoint will get hit and you can step through your update code logic.

バックグラウンド タスクが完了したら、同じデバッグ セッション内で Windows のスタート メニューからフォアグラウンド アプリを起動できます。When the background task completes, you can launch the foreground app from the Windows start menu within the same debug session. デバッガーが今回はフォアグラウンド プロセスに自動的にアタッチし、アプリのロジックをステップ実行できます。The debugger will again automatically attach, this time to your foreground process, and you can step through your app's logic.

注意

Visual Studio 2015 ユーザー: 上記の手順は、Visual Studio 2017 または Visual Studio 2019 に適用されます。Visual Studio 2015 users: The above steps apply to Visual Studio 2017 or Visual Studio 2019. Visual Studio 2015 を使用している場合、同じ手法を使用して UpdateTask をトリガーしてテストできますが、Visual Studio によってデバッガーがアタッチされることはありません。If you are using Visual Studio 2015, you can use the same techniques to trigger and test the UpdateTask, except Visual Studio will not attach to it. VS 2015 での代替の手順は、UpdateTask をエントリ ポイントとして設定する ApplicationTrigger をセットアップし、フォアグラウンド アプリから直接実行をトリガーすることです。An alternative procedure in VS 2015 is to setup an ApplicationTrigger that sets the UpdateTask as its Entry Point, and trigger the execution directly from the foreground app.

関連項目See also

アウトプロセス バックグラウンド タスクの作成と登録Create and register an out-of-process background task