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

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

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

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

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

キーワード

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

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

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

Windows App SDK を使用するアプリをビルドすると、そのアプリでは、"フレームワーク パッケージ" 経由でエンド ユーザーに配布される一連の Windows App SDK ランタイム コンポーネントを参照します。 フレームワーク パッケージを使用すると、アプリパッケージにバンドルするのではなく、ユーザーのデバイス上の単一の共有ソースを介して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 を直接呼び出すことができます (「Tutorial: 外部の場所でパッケージ化されたアプリでブートストラップ 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 を使用できます。

その他の要件

  • パッケージ 化されたアプリの場合、VCLibs フレームワーク パッケージの依存関係が要件です。 詳細については、デスクトップ ブリッジC++ ランタイム フレームワーク パッケージに関するページを参照してください。
  • パッケージ化されていないアプリの場合は、Visual C++ 再頒布可能パッケージが必要です。 詳しくは、「Microsoft Visual C++ 再頒布可能パッケージの最新のサポートされているダウンロード」をご覧ください。
  • C#。 .NET ランタイムについては、「.NET のダウンロードを参照してください。