チュートリアル: Windows App SDK を使用する、外部の場所でパッケージ化されたアプリまたはパッケージ化されていないアプリでブートストラップ API を使用する

この記事では、MSIX を使用してインストールされていないアプリ (つまり、外部の場所またはパッケージ化されていない) を構成してブートストラップ API を使用して、Windows アプリ SDK ランタイムを明示的に読み込み、API Windows アプリ SDK呼び出す方法について説明します。 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を使用するパッケージ化されていないデスクトップ アプリに適用されます。

このチュートリアルを完了する前に、ランタイム アーキテクチャを確認して、アプリがWindows アプリ SDKを使用するときにアプリが受け取るフレームワーク パッケージの依存関係と、外部の場所またはパッケージ化されていないアプリで動作するために必要な追加コンポーネントについて学習することをお勧めします。

前提条件

  1. Windows App SDK 用のツールをインストールする
  2. 外部の場所とパッケージ化されていないアプリでパッケージ化されたすべての依存関係がインストールされていることを確認します (外部の場所またはパッケージ化されていないフレームワークに依存するアプリの展開ガイドWindows アプリ SDK参照)。 これを行う簡単な方法は、Windows アプリ SDK ランタイム インストーラーを実行することです。

手順

このチュートリアルは、C# または C++ プロジェクトを使用して実行できます。

注意

昇格されたプロセスによって呼び出されると、動的依存関係とブートストラップ API が失敗します。 その結果、Visual Studio を昇格して起動しないでください。 詳細については、「 動的依存関係は昇格 #567 をサポートしていません 」を参照してください。

次の手順に従って、外部の場所またはパッケージ化されていない C# WinUI 3 プロジェクトを構成します。

  1. Visual Studio で、新しい C# コンソール アプリ プロジェクトを作成します 。 プロジェクトに DynamicDependenciesTest という名前を付けます。 プロジェクトを作成すると、"Hello, World!" が表示されます。C# コンソール アプリ。

  2. 次に、プロジェクトを構成します。

    1. ソリューション エクスプローラーで、プロジェクトを右クリックし、[プロジェクト ファイルの編集] を選択します。
    2. [TargetFramework] 要素の値を、ターゲット フレームワーク モニカーに置き換えます。 たとえば、アプリが Windows 10 バージョン 2004 を対象としている場合は、次のコードを使用します。
    <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
    
    1. プロジェクト ファイルを保存して閉じます。
  3. ソリューションのプラットフォームを x64 に変更します。 .NET プロジェクトの既定値は AnyCPU ですが、WinUI 3 ではそのプラットフォームはサポートされていません。

    1. [ビルド]>[構成マネージャー] を選択します。
    2. [アクティブ ソリューション プラットフォーム] の下にあるドロップダウンを選択し、[新規] をクリックして [新しいソリューション プラットフォーム] ダイアログ ボックスを開きます。
    3. [新しいプラットフォームを入力または選択してください] の下のドロップダウンで、[x64] を選択します。
    4. [OK] をクリックして [新しいソリューション プラットフォーム] ダイアログ ボックスを閉じます。
    5. 構成マネージャーで、[閉じる] をクリックします。
  4. プロジェクトに Windows アプリ SDK の NuGet パッケージをインストールします。

    1. ソリューション エクスプローラーで、[依存関係] ノードを右クリックし、[NuGet パッケージの管理] を選択します。
    2. [NuGet パッケージ マネージャー] ウィンドウで、[参照] タブを選択し、Microsoft.WindowsAppSDK パッケージをインストールします。
  5. ブートストラップ 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 は、そのルートにあるネイティブの C/C++ API であり、アプリでWindows アプリ SDK API を使用できます。 ただし、Windows アプリ SDK 1.0 以降を使用する .NET アプリでは、ブートストラップ API の .NET ラッパーを使用できます。 このラッパーは、ネイティブ C/C++ 関数を直接呼び出すよりも、.NET アプリでブートストラップ API を呼び出す簡単な方法を提供します。 前のコード例では、ブートストラップ API の .NET ラッパーで Bootstrap クラスの静的な Initialize メソッドと Shutdown メソッドを呼び出します。

  6. Windows アプリ SDK のランタイム コンポーネントが正しく読み込まれたことを示すために、Windows アプリ SDK の ResourceManager クラスを使用して文字列リソースを読み込むコードを追加します。

    1. 新しい リソース ファイル (.resw) をプロジェクトに追加します (既定の名前のままにします)。

    2. エディターでリソース ファイルを開いて、次のプロパティを使用して新しい文字列リソースを作成します。

      • 名前: Message
      • 値: Hello、resources!
    3. リソース ファイルを保存します。

    4. 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);
    
    1. [ デバッグなしで開始] (または [ デバッグの開始]) をクリックして、アプリをビルドして実行します。 Hello, resources! という文字列が正常に表示されることを確認します。

プロジェクトが WPF の場合

Windows Presentation Foundation (WPF) アプリについては、「WPF アプリでWindows アプリ SDKを使用する」を参照してください。