フレームワークに依存するアプリの展開アーキテクチャと概要

この記事では、Windows アプリ SDK展開のアーキテクチャの概要について説明します。 以下の概念は、主にフレームワークに依存するアプリWindows アプリ SDK適用されます。 フレームワークに依存するアプリは、ターゲット コンピューターに存在するWindows アプリ SDK ランタイムに依存します。

フレームワークに依存するアプリを配布するには、次の 2 つのメインオプションがあります。

アプリの展開方法 要件
パッケージに含まれる - パッケージ マニフェストで Framework パッケージへの依存関係を宣言する必要があります。
- 展開 API は Microsoft Store 分散アプリに必要であり、実行時の依存関係が確実にインストールされるように、ストア以外の分散アプリに推奨されます。
外部の場所でパッケージ化、またはパッケージ化されていない - インストーラーを使用するか、必要な MSIX パッケージを直接インストールしてランタイムを配布する必要があります。
- 追加のランタイム要件: Bootstrap API を使用して、Windows アプリ SDK ランタイムへのアクセスを初期化する必要があります。

これらの要件の詳細については、次の記事を参照してください。

キーワード

次のセクションでは、Windows アプリ SDK展開の主要な用語と、これらのパッケージの一部に関するその他の詳細を定義します。

期間 定義
Windows App SDK ランタイム Windows アプリ SDKを使用するためにアプリに必要な MSIX パッケージ。 これらのパッケージには、Framework、Main、Singleton、DDLM が含まれます。 使用されている機能とアプリのデプロイ方法に応じて、ターゲット コンピューターにこれらのパッケージの特定のセットが必要になります。
フレームワーク パッケージ アプリ (ほとんどのWindows アプリ SDK機能) によって実行時に使用されるバイナリが含まれています。 このフレームワークには、最新バージョンの Windows App SDK をアプリで自動的にインストールできるブートストラップ コンポーネントが含まれています。この SDK は、定期的なリリース サイクルで更新されます。
メイン パッケージ 動的な依存関係を追跡するためのバックグラウンド タスクを含み、Microsoft Store からフレームワーク パッケージの自動更新を有効にするパッケージ。
シングルトン パッケージ バックグラウンド タスク、サービス、アプリ拡張機能、およびフレームワーク パッケージに含まれていないその他のコンポーネント (プッシュ通知など) が含まれます。 これは通常、アプリ間で仲介される 1 つの実行時間の長いプロセスです。
動的依存関係有効期間マネージャー (DDLM) パッケージ 外部の場所またはパッケージ化されていないアプリが使用されている間に、OS が MSIX パッケージに対してサービス更新を実行できないようにします。
ブートストラップ 外部の場所とパッケージ化されていないアプリでパッケージ化され、アプリで必要に応じて最適なWindows アプリ SDKバージョンの一致を検索して読み込む目的で使用されるアプリローカル バイナリ。
Provisioning 他のユーザーが繰り返しインストールしなくても済むように、システム全体にパッケージ (ファイルとレジストリ キーを含む) をインストールして登録するプロセス。 これは OS の一部として、またはアプリのインストール中に実行できます。
インストーラー Framework、Main、Singleton、DDLM パッケージをデプロイする.exe インストーラーを参照します。
MSIX ユーザーが Microsoft Store または Web サイトから直接、ユーザーごとにアプリを安全にインストールできるようにする最新のインストーラー テクノロジ。 エンタープライズまたは共有 PC では、PowerShell と MDM を使用して、すべてのユーザーにアプリをインストールできます。

フレームワーク パッケージ

Windows App SDK を使用するアプリをビルドすると、そのアプリでは、"フレームワーク パッケージ" 経由でエンド ユーザーに配布される一連の Windows App SDK ランタイム コンポーネントを参照します。 フレームワーク パッケージを使用すると、アプリは、アプリ パッケージにバンドルするのではなく、ユーザーのデバイス上の 1 つの共有ソースを介してWindows アプリ SDK コンポーネントにアクセスできます。 フレームワーク パッケージにはまた、DLL や API 定義 (COM と Windows ランタイムの登録) などの独自のリソースも付属します。 これらのリソースはアプリのコンテキストで実行されるため、そのアプリの機能と特権を継承し、独自の機能または特権をアサートすることはありません。 フレームワーク パッケージの依存関係の詳細については、「MSIX フレームワーク パッケージと動的依存関係」を参照してください。

Windows App SDK フレームワーク パッケージは、Microsoft Store 経由でエンド ユーザーにデプロイされる MSIX パッケージです。 これは、セキュリティと信頼性の修正プログラムを含むサービス リリースで簡単かつ迅速に更新できます。 次の図に示すように、Windows アプリ SDKを使用するすべてのフレームワークに依存するアプリは、フレームワーク パッケージの共有インスタンスに依存します。

アプリがWindows アプリ SDK フレームワーク パッケージにアクセスする方法の図

Windows アプリ SDK フレームワーク パッケージの新しいバージョンが処理されると、フレームワークに依存するすべてのアプリが新しいバージョンに更新され、コピーを再配布する必要はありません。 最新バージョンのフレームワークがリリースされると、Windows がそのバージョンに更新され、アプリは再起動中に最新のフレームワーク パッケージ バージョンを自動的に参照します。 以前のフレームワーク パッケージ バージョンは、もう実行されなくなるか、またはシステム上でアプリによってアクティブに使用されるまで、システムから削除されません。

アプリがWindows アプリ SDK フレームワーク パッケージに対する更新プログラムを取得する方法の図

アプリの互換性は Microsoft や、Windows App SDK に依存するアプリにとって重要であるため、Windows App SDK フレームワーク パッケージはセマンティック バージョニング 2.0.0 規則に従います。 つまり、Windows App SDK のバージョン 1.0 をリリースした後、Windows App SDK フレームワーク パッケージではマイナー バージョンの変更と修正プログラム バージョンの変更の間の互換性が保証され、破壊的変更はメジャー バージョンの更新間でのみ発生します。

シングルトン パッケージ

シングルトン パッケージは、実行時間の長い 1 つのプロセスが、複数のアプリにまたがって使用されるサービス (異なるバージョンの Windows App SDK 上で実行される可能性があります) を確実に処理できるようにします。

Windows App SDK のシングルトンは、既存の UWP PushNotificationTrigger および ToastNotificationActionTrigger クラスではサポートできない、20H1 より前の Windows バージョンを使用している非パッケージ アプリやパッケージ化された Win32 アプリケーションのプッシュ通知を有効にするために必要です。 フレームワーク パッケージでサポートできない今後のWindows アプリ SDK機能は、Singleton パッケージに追加されます。

非パッケージ アプリのその他の要件

ブートストラップ

ブートストラップは、外部の場所またはパッケージ化されていないアプリでパッケージ化されたライブラリに含まれている必要があります。 ブートストラップ API が提供されます (「外部の場所またはパッケージ化されていないアプリにWindows アプリ SDK ランタイムを使用する」を参照してください)。これにより、パッケージ化されていないアプリで次の重要なタスクを実行できます。

  • Windows App SDK フレームワーク パッケージ用に動的依存関係有効期間マネージャー (DDLM) を初期化する。
  • Windows App SDK フレームワーク パッケージを見つけ、アプリのパッケージ グラフに読み込む。

これらのタスクを実行するために、nuget パッケージではモジュール初期化子を利用して、ユーザーに代わってブートストラップを接続します。 単純に、プロジェクト ファイルで <WindowsPackageType>None</WindowsPackageType> を設定します。 高度なシナリオでは、初期化を制御する場合は、アプリのスタートアップ コードでブートストラップ API を直接呼び出すことができます (「チュートリアル: 外部の場所でパッケージ化されたアプリでブートストラップ API を使用するか、Windows アプリ SDKを使用するパッケージ化されていないアプリでブートストラップ API を使用する」を参照)、パッケージ化されていないアプリのシステムを適切に初期化できるようにします。 アプリは、WinUI、アプリ ライフサイクル、MRT Core、DWriteCore などのWindows アプリ SDK機能を使用する前に、ブートストラップ API を使用する必要があります。

Windows アプリ SDK 1.0 リリースのブートストラップ ライブラリには、次のものが含まれます。

  • Microsoft.WindowsAppRuntime.Bootstrap.dll (C++ および C#)
  • Microsoft.WindowsAppRuntime.Bootstrap.Net.dll (C# ラッパー)

動的依存関係有効期間マネージャー (DDLM)

DDLM の目的は、非パッケージ アプリに使用されている Windows App SDK フレームワーク パッケージにサービスが提供されないようにすることです。 これには、その機能を提供するために、アプリのスタートアップの早い段階でブートストラップで初期化する必要のあるサーバーが含まれています。

Windows App SDK フレームワーク パッケージのバージョンとアーキテクチャごとに 1 つの DDLM があります。 つまり、x64 コンピューターでは、x86x64 の両方のアーキテクチャのアプリをサポートするために、その両方のバージョンの DDLM を使用できます。

その他の要件