フレームワーク依存の MSIX パッケージ アプリ以外の Windows App SDK 展開ガイド

この記事では、Windows アプリ SDKを使用するフレームワークに依存する MSIX パッケージ化されていないアプリを展開するためのガイダンスを提供します。 MSIX パッケージ化されていないアプリには、スパース パッケージ アプリとパッケージ化されていないアプリが含まれます。

概要

MSIX パッケージ化されていないアプリ開発者は、必要なWindows アプリ SDKランタイム パッケージをエンド ユーザーに展開する責任があります。 これを行うには、インストーラーを実行するか、MSIX パッケージを直接インストールします。 これらのオプションの詳細については、後述の「Windows アプリ SDK ランタイムのデプロイ」セクションを参照してください。

MSIX パッケージ化されていないアプリにも、追加のランタイム要件があります。 Bootstrapper API を使用して、Windows アプリ SDK ランタイムへのアクセスを初期化する必要があります。 さらに、アプリがWindows アプリ SDK以外の他のフレームワーク パッケージを使用する場合は、動的依存関係 API を使用できます。 これらの要件については、以下の「 MSIX パッケージ化されていないアプリのランタイム要件 」セクションで詳しく説明します。

必須コンポーネント

追加の前提条件

  • Windows App SDK の試験段階およびプレビュー バージョンでは、ランタイムをインストールするためにサイドローディングが有効になっている必要があります。
    • サイドローディングは、Windows 10 バージョン 2004 以降で自動的に有効になります。

    • 開発用コンピューターまたはデプロイ コンピューターで Windows 11 を実行している場合は、次の手順でサイドローディングが有効になっているかどうかを確認します。

      • 設定>開発者向けのプライバシー & セキュリティ>。 開発者モードの設定がオンになっていることを確認します。
    • 開発用コンピューターまたはデプロイ コンピューターで Windows 10 バージョン 1909 または以前のバージョンを実行している場合は、次の手順でサイドローディングが有効になっているかどうかを確認します。

      • 設定>更新 &開発者向けのセキュリティ > 開発者>向け機能を使用します。 サイドロード アプリまたは開発者モードが選択されていることを確認します。
    • 開発者モードの設定には、サイドローディングと他の機能が含まれます。

      Note

      コンピューターがエンタープライズ環境で管理されている場合は、これらの設定を変更できないポリシーが存在する可能性があります。 その場合、ユーザーまたはアプリがWindows アプリ SDKランタイムをインストールしようとしたときにエラーが発生した場合は、IT プロフェッショナルに連絡してサイドローディングまたは開発者モードを有効にしてください。

ランタイムWindows アプリ SDKデプロイする

MSIX パッケージ化されていないアプリには、Windows アプリ SDK ランタイムを展開するための 2 つのオプションがあります。

オプション 1: インストーラーを使用する

インストーラーを実行すると、すべてのWindows アプリ SDKランタイム パッケージをデプロイできます。 インストーラーは、Windows アプリ SDKのダウンロードで入手できます。 インストーラー (.exe) を実行すると、次のような出力が表示されます。

Deploying package: Microsoft.WindowsAppRuntime.1.0_0.318.928.0_x64__8wekyb3d8bbwe
Package deployment result : 0x0

Deploying package: Microsoft.WindowsAppRuntime.1.0_0.318.928.0_x86__8wekyb3d8bbwe
Package deployment result : 0x0

Deploying package: MicrosoftCorporationII.WindowsAppRuntime.Main.1.0_0.318.928.0_x64__8wekyb3d8bbwe
Package deployment result : 0x0
Provisioning result : 0x0

Deploying package: Microsoft.WindowsAppRuntime.Singleton_0.318.928.0_x64__8wekyb3d8bbwe
Package deployment result : 0x0
Provisioning result : 0x0

Deploying package: Microsoft.WinAppRuntime.DDLM.0.318.928.0-x6_0.318.928.0_x64__8wekyb3d8bbwe
Package deployment result : 0x0
Provisioning result : 0x0

Deploying package: Microsoft.WinAppRuntime.DDLM.0.318.928.0-x8_0.318.928.0_x86__8wekyb3d8bbwe
Package deployment result : 0x0
Provisioning result : 0x0

All install operations successful.

ユーザー操作なしでインストーラーを実行し、オプションを使用してすべてのテキスト出力を --quiet 抑制できます。

WindowsAppRuntimeInstall.exe --quiet

また、このオプションを使用して--force、MSIX パッケージを強制的に更新し、現在実行中のWindows アプリ SDKプロセスをすべてシャットダウンすることもできます。 この機能は 1.1 で導入されています。

WindowsAppRuntimeInstall.exe --force

すべてのインストーラー コマンド ライン オプションを表示するには、次を実行 WindowsAppRuntimeInstall --hします。

インストールが完了したら、MSIX パッケージ化されていないアプリを実行できます。 Windows アプリ SDKを使用する MSIX パッケージ以外のアプリをビルドして実行する方法の例については、「チュートリアル: Windows アプリ SDKを使用する MSIX パッケージ化されていないアプリでブートストラップ API を使用する」を参照してください。

Windows App SDK インストーラーをアプリのセットアップにチェーンする

アプリ用のカスタム セットアップ プログラムがある場合は、アプリのセットアップ プロセスでWindows アプリ SDKセットアップ プロセスをチェーンできます。 Windows App SDK インストーラーでは現在、既定の UI が提供されないため、そのセットアップのカスタム UI を使用してチェーンする必要があります。

Windows App SDK のセットアップをサイレントに起動して追跡している間、ShellExecute を使用して、セットアップの進行状況の独自のビューを表示できます。 Windows アプリ SDK インストーラーは、Windows App MSIX バンドルをサイレント モードで開梱し、PackageManager.AddPackageAsync メソッドを呼び出してインストールを完了します。 これは、以前に使用していた可能性がある他のランタイム インストーラー (.NET、Visual C++、DirectX など) と非常によく似ています。

セットアップ プログラムから Windows アプリ SDK インストーラーを実行する方法を示すコード例については、インストーラー機能テストRunInstaller 関数を参照してください。

インストーラーのサンプル

セットアップ中にコンソール ウィンドウをポップアップせずに Win32 セットアップ プログラムからインストーラーを起動する方法については、次のサンプルを参照してください。

トラブルシューティング

戻りコード

次の表は、Windows App SDK .exe インストーラーの最も一般的なリターン コードの一覧を示しています。 これらのリターン コードは、すべてのバージョンのインストーラーで共通です。

リターン コード 説明
0x0 パッケージのインストールまたはプロビジョニングが正常に完了しました。
0x80073d06 1 つ以上のパッケージをインストールできませんでした。
0x80070005 アプリが管理者特権で実行されていないか、またはインストールを実行しているユーザーに管理者特権がないため、システム全体にわたるインストールまたはプロビジョニングを実行できませんでした。

インストール エラー

Windows App SDK インストーラーがインストール中にエラーを返す場合は、問題を説明するエラー コードを返します。

  • 一般的なエラー コードの一覧を参照してください。
  • エラー コードによって十分な情報が提供されない場合は、詳細なイベント ログでさらに多くの診断情報を見つけることができます。
  • 問題を調査できるように、エラー コードやイベント ログと一緒に問題を報告してください。

オプション 2: Windows アプリ SDKランタイム パッケージを直接デプロイする

エンド ユーザーへのデプロイのために Windows App SDK インストーラーを使用する代わりに、アプリのプログラムまたは MSI を使用して MSIX パッケージを手動でデプロイできます。 このオプションは、より細かく制御したい開発者には最適です。

セットアップ プログラムで MSIX パッケージをインストールする方法を示す例については、Windows App SDK インストーラー コードの install.cpp を参照してください。

展開シナリオ

  • Windows アプリ SDK ランタイムシステム全体のインストール: システム全体のインストールでは、今後追加される新しいユーザーを含むすべてのユーザーのマシンが変更されます。 アプリが管理者特権で実行されていて、インストールを実行しているユーザーが管理者特権を持っている場合、インストーラーは ProvisionPackageForAllUsersAsync を呼び出すことによって、システム全体で MSIX パッケージを登録します。 システム全体にわたる登録が成功しない場合は、インストールを実行している現在のユーザーに対してのみインストールが実行されます。 管理されているエンタープライズ環境では、IT 管理者が、通常どおりにすべてのユーザーに対してプロビジョニングできる必要があります。

  • Windows App SDK インストーラーによって再配布されるアーキテクチャ: Windows App SDK インストーラーは、x86x64Arm64 の各アーキテクチャで使用できます。 インストーラーの各バージョンには、その特定のアーキテクチャの MSIX パッケージが含まれています。 たとえば、x64 または Arm64 デバイスで x86 WindowsAppRuntimeInstall.exeを実行すると、インストーラーはそのデバイス アーキテクチャのパッケージを展開します。

  • すべての Windows App SDK MSIX パッケージが既にコンピューターにインストールされている: MSIX パッケージがシステム全体にわたる場所にインストールされており、ディスク上には 1 つのコピーのみが存在します。 MSIX パッケージのすべての依存関係が既にマシンにインストールされているときにアプリが Windows App SDK のインストールを試行した場合、そのインストールは実行されません。

  • 1 つ以上の Windows App SDK MSIX パッケージがコンピューターにインストールされていない: Windows App SDK をデプロイする場合は、すべての依存関係が確実にインストールされるようにして、エンドユーザー エクスペリエンスの中断を回避するために、常にすべての MSIX パッケージ (フレームワーク、メイン、シングルトン、DDLM) のインストールを試みます。

MSIX パッケージ化されていないアプリのランタイム要件

MSIX パッケージ化されていないアプリには、Windows アプリ SDK ランタイムを使用するための追加のランタイム要件があります。 これには、実行時に Windows アプリ SDK Framework パッケージの参照と初期化が含まれます。 さらに、動的依存関係 API を使用して、Windows アプリ SDK以外の他のフレームワーク パッケージを参照することもできます。

Windows App SDK ランタイムを使用する

MSIX パッケージ化されていないアプリは、実行時にWindows アプリ SDKを使用するために Bootstrapper API を呼び出す必要があります。 これは、アプリが WinUI、アプリ ライフサイクル、MRT Core、DWriteCore などのWindows アプリ SDK機能を使用する前に必要です。 ブートストラップ コンポーネントを使用すると、MSIX パッケージ以外のアプリで次の重要なタスクを実行できます。

  • Windows App SDK フレームワーク パッケージを見つけ、アプリのパッケージ グラフに読み込む。
  • Windows App SDK フレームワーク パッケージ用に動的依存関係有効期間マネージャー (DDLM) を初期化する。 DDLM の目的は、MSIX パッケージ以外のアプリで使用中のWindows アプリ SDK フレームワーク パッケージのサービスを防ぐことです。

MSIX パッケージ化されていないアプリのWindows アプリ SDK ランタイムを読み込む最も簡単な方法は、プロジェクト ファイル (.csproj または .vcxproj) でプロパティを設定<WindowsPackageType>None</WindowsPackageType>することです。 初期化をより詳細に制御するために、アプリのスタートアップ コードでブートストラップ API を直接呼び出すこともできます。 詳細については、「Windows アプリ SDK ランタイムの使用」と「チュートリアル: Windows アプリ SDKを使用する MSIX パッケージ以外のアプリでブートストラップ API を使用する」を参照してください

動的依存関係のサポートにより、MSIX パッケージ化されていないアプリケーションは、MSI やインストーラーなどの既存の展開メカニズムを維持し、アプリケーションでWindows アプリ SDKを活用できます。 動的依存関係は、パッケージ化されたアプリと MSIX パッケージ化されていないアプリの両方で使用できますが、主に MSIX パッケージ化されていないアプリで使用することを目的としています。

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

Dynamic Dependencies API を使用して他のフレームワーク パッケージを参照する

Windows アプリ SDK以外の他のフレームワーク パッケージ (DirectX など) で機能を使用する場合は、MSIX パッケージ化されていないアプリで動的依存関係 API を呼び出すことができます。 ブートストラップ コンポーネントに加えて、Windows アプリ SDKには、動的依存関係 API を実装する広範な C/C++ 関数と WinRT クラスのセットも用意されています。 この API は、実行時に任意のフレームワーク パッケージを動的に参照するために使用されるように設計されています。

詳細については、デスクトップ アプリから MSIX フレームワーク パッケージを動的に使用する方法と動的依存関係のサンプルを参照してください。

ターゲット コンピューターに .winmd ファイルをデプロイする

アプリと共に、Windows メタデータ (.winmd) ファイルを展開することをお勧めします。 メタデータは、実行時にさまざまな API や動作で使用でき、その存在しない場合は機能が制限されたり、機能が中断されたりする可能性があります。 たとえば、メタデータを使用して、アパートメントの境界を越えてオブジェクトをマーシャリングできます。マーシャリングする必要は、マシンのパフォーマンスの機能である可能性があります。 メタデータが必要かどうかを判断する決定的な方法はないため、サイズについて非常に懸念がある場合を除き、デプロイ .winmdする必要があります。