次の方法で共有


動的依存関係 API を使用して実行時に MSIX パッケージを参照する

2 つの実装

ターゲット プラットフォームとシナリオに応じて、動的依存関係 API の 2 つの実装から選択できます。

  • Windows App SDK の動的依存関係 API。 Windows App SDK には、動的依存関係 API を実装する C および C++ 関数 (msixdynamicdependency.h) と Windows ランタイム (WinRT) 型 (Microsoft.Windows.ApplicationModel.DynamicDependency 名前空間) が用意されています。 この API の実装は、Windows App SDKをサポートする任意のバージョンの Windows で使用できます。
  • Windows 11 の動的依存関係 API。 Windows 11 には、動的依存関係 API を実装する C および C++ 関数も用意されています (appmodel.h)。 この API の実装は、Windows 11 バージョン 22H2 (10.0; ビルド 22621) 以降を対象とするアプリのみが使用できます。

また、2 つの実装の違い 参照してください。

このトピックで説明するように、Windows App SDK (C/C++) API は、追加の Mdd プレフィックスを持つ Windows 11 (C/C++) API と同じ名前を持ちます。 Mdd は、Microsoft 動的依存関係を表します。

また、フレームワーク、リソース、オプションの、メイン パッケージ 含め、さまざまな種類の MSIX パッケージがあります。 動的依存関係 API を使用すると、パッケージ化されていないアプリで、WinUI 2 や DirectX ランタイムなどの フレームワーク パッケージを参照して使用できます。 フレームワーク パッケージの依存関係の詳細については、「MSIX フレームワーク パッケージと動的依存関係の」を参照してください。

具体的には、動的依存関係 API には、MSIX パッケージの インストール時参照 および ランタイム参照 を管理する方法が用意されています。 詳細については、「フレームワーク パッケージのサービス モデル を参照してください。

動的依存関係 API を使用する

パッケージ化されていないアプリで動的依存関係 API を使用して MSIX パッケージへの依存関係を取得するには、コードで次の一般的なパターンに従います。

1. インストール時の参照を作成する

アプリのインストーラーで、またはアプリの初回実行時に、次のいずれかの関数またはメソッドを呼び出して、使用する MSIX パッケージの一連の条件を指定します。 これにより、指定した条件を満たす MSIX パッケージにアプリが依存していることをオペレーティング システム (OS) に通知します。 条件を満たす 1 つ以上の MSIX パッケージがインストールされている場合、Windows では、インストール時の参照が削除されるまで、少なくとも 1 つのパッケージがインストールされたままになります。

指定する条件には、パッケージ ファミリ名、最小バージョン、アーキテクチャが含まれます。ただし、特定の MSIX パッケージを指定することはできません。 MSIX パッケージにランタイム参照を追加すると、API は、指定された条件を満たす最高バージョンを選択します。

また、有効期間成果物(現在のプロセス、ファイル、またはアプリがまだ使用可能であることをシステムに示す Windows レジストリ キー) を指定する必要があります。 指定した成果物が存在しなくなった場合、OS は依存関係が不要になったと想定でき、他のアプリが依存関係を宣言していない場合は MSIX パッケージをアンインストールできます。 この機能は、アプリがアンインストール時にインストール時のピンの削除を怠るシナリオに役立ちます。

この API は、実行時参照を作成し、インストール時参照を削除するために、他の呼び出しで使用する必要がある依存関係 ID を返します。

2. 実行時参照を追加する

アプリで MSIX パッケージを使用する必要がある場合は、次のいずれかの関数またはメソッドを呼び出して、指定された MSIX パッケージへのアクセスを要求し、それに対するランタイム参照を追加します。 この API を呼び出すと、MSIX パッケージがアクティブに使用されていることを OS に通知し、バージョンの更新プログラムをサイド バイ サイドで処理します (実質的にアンインストールを遅らせるか、アプリの使用が完了するまで古いバージョンにサービスを提供します)。 成功した場合、アプリはクラスをアクティブ化し、MSIX パッケージのコンテンツを使用する可能性があります。

この API を呼び出すときは、インストール時参照の作成時に返された依存関係 ID と、プロセスのパッケージ グラフで MSIX パッケージに使用する目的のランクを渡す必要があります。 この API は、参照された MSIX パッケージの完全な名前と、アクティブな使用依存関係を追跡するために使用されるハンドルを返します。 インストール時参照の作成時に指定した条件を満たす MSIX パッケージが複数インストールされている場合、API は条件を満たす最高バージョンを選択します。

3. 実行時参照を削除する

MSIX パッケージを使用してアプリが完了したら、次のいずれかの関数またはメソッドを呼び出して、ランタイム参照を削除します。 通常、アプリはシャットダウン中にこの API を呼び出します。 この API は、MSIX パッケージの不要なバージョンを削除しても安全であることを OS に通知します。

この API を呼び出すときは、実行時参照を追加したときに返されたハンドルを渡す必要があります。

4. インストール時の参照を削除する

アプリがアンインストールされたら、次のいずれかの関数またはメソッドを呼び出して、インストール時の参照を削除します。 この API は、他のアプリに依存関係がない場合は、MSIX パッケージを削除しても安全であることを OS に通知します。

この API を呼び出すときは、インストール時参照の作成時に返された依存関係 ID を渡す必要があります。

2 つの実装の違い

有効期間マネージャーの必要性 (Windows App SDK の制限)

Windows App SDK の動的依存関係 API を使用して MSIX パッケージへの依存関係を取得する場合、API には、MSIX パッケージが使用中であることを Windows に通知し、使用中のフレームワークのサービスをブロックするために、別のインストール済みパッケージと実行中のプロセスを介したヘルプが必要です。 そのコンポーネントは、ライフタイムマネージャーと呼ばれます。

Windows App SDK は、フレームワーク パッケージの場合、Dynamic Dependency Lifetime Manager (DDLM)と呼ばれる有効期間マネージャー コンポーネントを提供します。 ただし、現在、Microsoft の同様の有効期間マネージャー コンポーネントを提供しているフレームワーク パッケージは他にありません。

Windows 11 の動的依存関係 API には、この制限はありません。

メイン パッケージを参照して使用する (Windows App SDK の制限)

動的依存関係は、常に フレームワーク パッケージをターゲットにすることができます。 メインの パッケージを参照して使用できるのは、Windows 11 の動的依存関係 API だけです。

メイン パッケージは、アプリ パッケージ マニフェスト ソース ファイル (Visual Studio の Package.appxmanifest ファイル) を正しく構成している必要があります。 具体的には、メイン パッケージ (呼び出し元ではなくターゲット) <uap15:DependencyTarget>true</> を設定する必要があります (uap15:DependencyTargetを参照)。 そのため、 の目的は、動的依存関係がメイン パッケージ ターゲットにできるようにすることです。 言い換えると、メイン パッケージは、動的な依存関係としてそれ自体を使用できるようにオプトインする必要があります (一方、フレームワーク パッケージでは常に暗黙的に許可されます)。

Windows App SDK フレームワーク パッケージを参照する (Windows App SDK の制限)

パッケージ化されていないアプリでは、Windows App SDK の動的依存関係 API を使用して、Windows App SDK フレームワーク パッケージ を参照することはできません (と同様に、他の MSIX パッケージを参照 できます)。 代わりに、Windows App SDK によって提供される ブートストラップ API を使用する必要があります。 ブートストラップ API は、Windows App SDK フレームワーク パッケージへの依存関係を取得するように設計された動的依存関係 API の特殊な形式です。 詳細については、「外部の場所またはパッケージ化されていないでパッケージ化されたアプリに Windows App SDK ランタイムを使用する」を参照してください。

Windows 11 の動的依存関係 API には、この制限はありません。