チュートリアル: Windows App SDK を使用する、外部の場所でパッケージ化されたアプリまたはパッケージ化されていないアプリでブートストラップ API を使用する
この記事では、MSIX を使用してインストールされていないアプリ (つまり、外部の場所にパッケージ化されているか、パッケージ化されていない) を構成し、ブートストラップ API を使用して、Windows アプリ SDK ランタイムを明示的に読み込み、WINDOWS アプリ SDK API を呼び出す方法について説明します。 MSIX 経由でインストールされないアプリには、外部の場所でパッケージ化されたアプリと、パッケージ化されていないアプリが含まれます。
重要
Windows App SDK 1.0 以降、外部の場所でパッケージ化されたアプリから、またはパッケージ化されていないアプリから Windows App SDK を読み込むための既定の方法は、<WindowsPackageType>
プロジェクト プロパティを介して自動初期化を使用する (と同時に追加の構成変更を行う) というものです。 WinUI 3 プロジェクトのコンテキストでの自動初期化に関連する手順については、「 最初の WinUI 3 プロジェクトを作成するを参照してください。 または、WinUI 3 ではない既存のプロジェクトがある場合は、「既存のプロジェクトで Windows App SDK を使用する」を参照してください。
高度なニーズ (カスタム エラー処理や、特定のバージョンの Windows App SDK の読み込みなど) がある場合は、代わりにブートストラップ API を明示的に呼び出すことができます。 これは、このトピックで示すアプローチです。 また、詳細については、「外部の場所でパッケージ化されたアプリまたはパッケージ化されていないアプリのWindows アプリ SDK ランタイムを使用するを参照してください。
このトピックでは、基本的なコンソール アプリ プロジェクトからブートストラップ API を明示的に呼び出す方法について説明します。ただし、この手順は、Windows アプリ SDKを使用するパッケージ化されていないデスクトップ アプリに適用されます。
このチュートリアルを完了する前に、Runtime アーキテクチャを確認しFrameworkWindows アプリ SDKを使用するときにアプリが受け取るパッケージの依存関係、および外部の場所またはパッケージ化されていないアプリで動作するために必要な追加コンポーネントについて学習することをお勧めします。
前提条件
- Windows App SDK 用のツールをインストールする
- 外部の場所とパッケージ化されていないアプリでパッケージ化されたすべての依存関係がインストールされていることを確認します (外部の場所またはパッケージ化されていないWindows アプリ SDKパッケージ化されたフレームワーク依存アプリの展開ガイドを参照してください)。 これを行う簡単な方法は、Windows アプリ SDKランタイム インストーラーを実行することです。
手順
C# または C++ プロジェクトを使用して、このチュートリアルに従うことができます。
Note
動的依存関係とブートストラップ API は、管理者特権でのプロセスによって呼び出されると失敗します。 そのため、Visual Studio を管理者特権で起動しないでください。 詳細については、「 Dynamic Dependencies doesn't support elevation #567 」を参照してください。
次の手順に従って、外部の場所でパッケージ化されているか、パッケージ化されていない C# WinUI 3 プロジェクトを構成します。
Visual Studio で、新しい C# Console App プロジェクトを作成します。 プロジェクトに DynamicDependenciesTest という名前を付けます。 プロジェクトを作成すると、"Hello, World!" が作成されます。C# コンソール アプリ。
次に、プロジェクトを構成します。
- ソリューション エクスプローラーで、プロジェクトを右クリックし、[プロジェクト ファイルの編集] を選択します。
- [TargetFramework] 要素の値を、ターゲット フレームワーク モニカーに置き換えます。 たとえば、アプリが Windows 10 バージョン 2004 を対象としている場合は、次のコードを使用します。
<TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
- プロジェクト ファイルを保存して閉じます。
ソリューションのプラットフォームを x64 に変更します。 .NET プロジェクトの既定値は AnyCPU ですが、WinUI 3 ではそのプラットフォームはサポートされていません。
- [ビルド]>[構成マネージャー] を選択します。
- [アクティブ ソリューション プラットフォーム] の下にあるドロップダウンを選択し、[新規] をクリックして [新しいソリューション プラットフォーム] ダイアログ ボックスを開きます。
- [新しいプラットフォームを入力または選択してください] の下のドロップダウンで、[x64] を選択します。
- [OK] をクリックして [新しいソリューション プラットフォーム] ダイアログ ボックスを閉じます。
- 構成マネージャーで、[閉じる] をクリックします。
プロジェクトに Windows アプリ SDK の NuGet パッケージをインストールします。
- ソリューション エクスプローラーで、[依存関係] ノードを右クリックし、[NuGet パッケージの管理] を選択します。
- NuGet パッケージ マネージャー ウィンドウで Browse タブを選択し、Microsoft.WindowsAppSDK パッケージをインストールします。
これで、ブートストラップ API を使用する準備ができました (外部の場所またはパッケージ化されていないアプリのWindows アプリ SDK ランタイムを使用するを参照)、Windows アプリ SDK フレームワーク パッケージへの依存関係を動的に取得します。 これにより、アプリで Windows アプリ SDK API を使用できるようになります。
Program.cs コード ファイルを開き、既定のコードを次のコードに置き換えて、ブートストラップを初期化する Bootstrap.Initialize メソッドを呼び出します。 このコードでは、ブートストラップの初期化時にアプリが依存するWindows アプリ SDKのバージョンを定義します。
重要
特定の構成に合わせて、以下のコードを編集する必要があります。 インストールしたWindows アプリ SDKのバージョンのいずれかを指定できるように、Bootstrap.Initialize メソッドのパラメーターの説明を参照してください。
using System; using Microsoft.Windows.ApplicationModel.DynamicDependency; namespace DynamicDependenciesTest { class Program { static void Main(string[] args) { Bootstrap.Initialize(0x00010002); Console.WriteLine("Hello, World!"); // Release the DDLM and clean up. Bootstrap.Shutdown(); } } }
ブートストラップ API は、アプリで Windows アプリ SDK API を使用できるようにするネイティブ C/C++ API です。 ただし、Windows アプリ SDK 1.0 以降を使用する .NET アプリでは、ブートストラップ API に .NET ラッパーを使用できます。 このラッパーは、ネイティブの C/C++ 関数を直接呼び出すよりも、.NET アプリでブートストラップ API を呼び出す簡単な方法を提供します。 前のコード例では、ブートストラップ API の .NET ラッパーの Bootstrap クラスの静的な Initialize メソッドと Shutdown メソッドを呼び出します。
Windows アプリ SDK のランタイム コンポーネントが正しく読み込まれたことを示すために、Windows アプリ SDK の ResourceManager クラスを使用して文字列リソースを読み込むコードを追加します。
プロジェクトに新しい Resources File (.resw) を追加します (既定の名前のままにします)。
エディターでリソース ファイルを開いて、次のプロパティを使用して新しい文字列リソースを作成します。
- 名前: Message
- 値: Hello, resources!
リソース ファイルを保存します。
Program.cs コード ファイルを開き、
Console.WriteLine("Hello, World!");
行を次のコードに置き換えます。
// Create a resource manager using the resource index generated during build. var manager = new Microsoft.Windows.ApplicationModel.Resources.ResourceManager("DynamicDependenciesTest.pri"); // Look up a string in the .resw file using its name. Console.WriteLine(manager.MainResourceMap.GetValue("Resources/Message").ValueAsString);
- [デバッグなしで開始]<
(または [デバッグの開始) をクリックして、アプリをビルドして実行します。 Hello, resources!
という文字列が正常に表示されることを確認します。
プロジェクトが WPF の場合
Windows Presentation Foundation (WPF) アプリについては、「 WPF アプリでWindows アプリ SDKを使用するを参照してください。
関連トピック
Windows developer