バックグラウンド アプリケーションの開発
Note
Visual Studio では、Visual Studio がアクセスできる RS4 以上の SDK がインストールされていない限り、RS5 (または OpenSSH が有効になった RS4) IoT イメージにデプロイするときに暗号エラーが生成されます。
バックグラウンド アプリケーションは、直接的な UI がないアプリケーションです。 これらのアプリケーションは、デプロイと構成が完了すると、コンピューターの起動時に起動し、プロセス ライフタイム管理のリソース使用量の制限なしで継続的に実行されます。 これらは、クラッシュまたは終了した場合、システムによって自動的に再起動されます。 これらのバックグラウンド アプリケーションには、非常に単純な実行モデルが用意されています。 これらのテンプレートでは、"IBackgroundTask" インターフェイスを実装するクラスを作成し、空の "Run" メソッドを生成します。 この "Run" メソッドは、アプリケーションへのエントリ ポイントです。
注意すべき重要な点が 1 つあります。既定では、アプリケーションは Run メソッドの完了時にシャットダウンされます。 つまり、入力またはタイマーを待機しているサーバーを実行する一般的な IoT パターンに従うアプリでは、アプリが途中で終了します。 これが起こらないようにするには、"GetDeferral" メソッドを呼び出して、アプリケーションが終了しないようにする必要があります。 遅延パターンの詳細については、こちらをご覧ください。
インストールするバックグラウンド アプリケーションの入手先
Visual Studio ギャラリー (こちら) から IoT テンプレートをダウンロードしてインストールし、バックグラウンド アプリケーションを有効にすることができます。 または、Visual Studio Gallery で Windows IoT Core Project Templates
を検索するか、Visual Studio の [拡張機能と更新プログラム] ダイアログ ([ツール] > [拡張機能と更新プログラム] > [オンライン]) で直接テンプレートを見つけることもできます。
利用可能な言語
以下に対応するバックグラウンド アプリケーション (IoT) テンプレートがあります。
- C++
File > New > Project > Installed > Visual C++ > Windows > Windows IoT Core
- C#
File > New > Project > Installed > Visual C# > Windows > Windows IoT Core
- Visual Basic
File > New > Project > Installed > Visual Basic > Windows > Windows IoT Core
- JavaScript
File > New > Project > Installed > JavaScript > Windows > Windows IoT Core
バックグラウンド アプリケーションの使用方法
バックグラウンド アプリケーションの作成は、バックグラウンド タスクの作成とよく似ています。 バックグラウンド アプリケーションが起動すると、Run メソッドが呼び出されます。
public void Run(IBackgroundTaskInstance taskInstance)
{
}
Run メソッドが終了すると、遅延オブジェクトが作成されない限り、バックグラウンド アプリケーションは終了します。 非同期プログラミングでは、次のように遅延を取得するのが一般的です。
private BackgroundTaskDeferral deferral;
public void Run(IBackgroundTaskInstance taskInstance)
{
deferral = taskInstance.GetDeferral();
//
// TODO: Insert code to start one or more asynchronous methods
//
}
遅延を取得した後は、遅延オブジェクトの Complete メソッドが呼び出されるまで、バックグラウンド アプリケーションは続行されます。
deferral.Complete();
バックグラウンド アプリケーションの起動方法
この質問は、デプロイと呼び出しに分けることができます。
バックグラウンド アプリケーションをデプロイするには、次のいずれかの方法があります。
- Visual Studio の F5 キー (ビルド、デプロイ、呼び出し) を使用します。 詳細については、Visual Studio からデプロイして起動する方法が記載されている Hello World サンプルをご覧ください。
Note
これにより、デバイスの起動時にバックグラウンド アプリケーションを起動するように構成されることはありません。
- Visual Studio 2015 で AppX を作成するには、[プロジェクト] > [ストア] > [アプリ パッケージの作成] の順に選択します。 AppX を作成したら、Windows デバイス ポータルを使用して Windows 10 IoT Core デバイスにそれをデプロイできます。
バックグラウンド アプリケーションを呼び出すには、次のいずれかの方法があります。
- 前述のように、Visual Studio の F5 機能によってバックグラウンド アプリケーションをデプロイし、すぐに起動します。
Note
これにより、デバイスの起動時にバックグラウンド アプリケーションを起動するように構成されることはありません。
- IoT デバイスにデプロイされたバックグラウンド アプリケーションの場合は、iotstartup.exe ユーティリティを使用して、デバイスの起動時にバックグラウンド アプリケーションを起動するように構成できます。 バックグラウンド アプリケーションをスタートアップ アプリとして指定するには、次の手順に従います (以下の
BackgroundApplication1
は、実際のアプリの名前に置き換えてください)。
こちらの説明に従って、Windows IoT Core デバイスで PowerShell (PS) セッションを開始します。
PS セッションから次のように入力します。
[<your IP address>]: PS C:\> iotstartup list BackgroundApplication1
バックグラウンド アプリケーションの完全な名前が表示されます。次に例を示します。
Headed : BackgroundApplication1-uwp_cqewk5knvpvee!App Headless : BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpvee
このユーティリティでは、バックグラウンド アプリケーションが "ヘッドレス" アプリケーションであり、正しくインストールされていることを確認します。 バックグラウンド アプリケーションの場合、Headed エントリも表示される可能性がありますが、これは無視できます。
これで、このアプリを "スタートアップ アプリ" として簡単に設定できます。 次のコマンドを入力します。
[<your IP address>]: PS C:\> iotstartup add headless BackgroundApplication1
このユーティリティでは、バックグラウンド アプリケーションがヘッドレスの "スタートアップ アプリ" の一覧に追加されたことを確認します。
Added Headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpveeplication1
続けて、Windows IoT Core デバイスを再起動します。 PS セッションから shutdown コマンドを発行できます。
[<your IP address>]: PS C:\> shutdown /r /t 0
デバイスが再起動されると、バックグラウンド アプリケーションが自動的に起動し、停止した場合は常に Windows 10 IoT Core によって再起動されます。
Note
バックグラウンド アプリを自動的に実行するように登録すると、そのアプリは終了またはクラッシュした場合に自動的に再起動されます。 アプリには起動または再起動の理由が通知されないため、再起動時に特別な操作を行う必要がある場合は、アプリ内でアプリの状態を追跡する必要があります。
ヘッドレス スタートアップ アプリの一覧からバックグラウンド アプリケーションを削除するには、次のコマンドを入力します。
[<your IP address>]: PS C:\> iotstartup remove headless BackgroundApplication1
このユーティリティでは、バックグラウンド アプリケーションがヘッドレスの "スタートアップ アプリ" の一覧から削除されたことを確認します。
Removed headless: BackgroundApplication1-uwp_1.0.0.0_x86__cqewk5knvpvee
参照
カスタム イメージをビルドするときにバックグラウンド アプリを追加するには、「Appx パッケージを作成する」を参照してください