次の方法で共有


パッケージ化されていない WinUI 3 アプリを配布する

パッケージ化されていない配布を使用すると、MSIX を使用せずに WinUI 3 アプリを配布できます。MSIX 展開が利用できないエンタープライズ シナリオや、従来のフォルダーベースのインストールを好む開発者に便利です。

Important

開始する前に、これらの制限事項を確認してください。 パッケージ化されていない WinUI 3 アプリには、配布戦略に影響する制約があります。

  • 単一ファイル EXE は利用できません — Windows アプリ SDK ランタイムと WinUI 3 の依存関係は、個別のファイルとして存在しなければなりません。 .NETの単一ファイル発行機能 (PublishSingleFile) は、それらを 1 つの実行可能ファイルにバンドルできません。 常にファイルのフォルダーを配布します (または、WiX や Inno セットアップなどの従来のインストーラーでラップします)。
  • Runtime 依存関係 — Windows アプリ SDK ランタイムがユーザーのコンピューターに存在している必要があります。 ランタイム インストーラーをアプリにバンドルするか、自己完結型のデプロイを使用する必要があります (出力サイズが大幅に増加します)。 以下の「 Windows アプリ SDK ランタイムのデプロイを参照してください。
  • パッケージ ID なし — パッケージ マニフェストがない場合、アプリはマニフェスト ベースのWindows機能を使用できません。アプリ インストーラーまたはストアによる自動更新、バックグラウンド タスクの登録、パッケージ マニフェストによるファイルの種類の関連付けやスタート メニュー タイルのカスタマイズはありません。 (インストーラーによって記述されたレジストリ エントリやショートカットなどの従来の Win32 メカニズムは引き続き機能します)。
  • MSIX/パッケージID無しの Store 提出 — この配布モデルにはパッケージIDがないため、Microsoft Store への MSIX 提出対象外です。 ( MSI または EXE インストーラーの申請パスを使用して、従来のインストーラーをストアに送信できますが、これはこの記事で説明するワークフローとは別のワークフローです)。

これらの制約が懸念される場合は、完全な MSIX 変換を行わずにパッケージ ID を追加するために、 アプリのパッケージ 化 (ほとんどのアプリに推奨) または 外部の場所でのパッケージ化 を検討してください。

すべてのパッケージ化オプションの詳細については、 アプリのパッケージ化の長所と短所に関するページを参照してください

新規または既存の WinUI アプリのパッケージ化を解除する場合は、次の手順に従います。

.csproj ファイルで、最初の既存の PropertyGroup 要素を見つけます。この要素には、OutputTypeTargetFramework、その他のプロパティも含まれています。

  • WindowsPackageType project プロパティをこの PropertyGroup 要素に追加します。 その値を Noneに設定します。
<Project ...>
  ...
  <PropertyGroup>
    <WindowsPackageType>None</WindowsPackageType><!-- add this -->
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    ...
  </PropertyGroup> 
  ...
</Project>

Visual Studio (Debugging または Without Debugging )、Unpackaged 起動プロファイルを Start ドロップダウンから選択します。 Package プロファイルが選択されている場合は、Visual Studioに展開エラーが表示されます。 この手順は、コマンド ラインまたはエクスプローラーからアプリケーション (.exe) Windows起動する場合は必要ありません。

Visual Studio - C# アプリケーションのパッケージ化されていない起動プロファイルが強調表示された状態でドロップダウンを開始します

ブートストラッパー API

<WindowsPackageType>None</WindowsPackageType> プロジェクト プロパティを設定すると、auto-initializer は、アプリに最適なバージョンのWindows アプリ SDKを検索して読み込みます。

高度なニーズ (カスタム エラー処理、特定のバージョンのWindows アプリ SDKの読み込みなど) がある場合は、代わりにブートストラップ API を明示的に呼び出すことができます。 詳細については、「外部の場所でパッケージ化されたアプリまたはパッケージ化されていないアプリのWindows アプリ SDKランタイムを使用する」および「Tutorial: Windows アプリ SDKを利用する外部の場所でパッケージ化されたアプリまたはパッケージ化されていないアプリでブートストラップAPIを使用する方法」を参照してください。

ブートストラップの詳細については、 フレームワークに依存するアプリの展開アーキテクチャと概要に関するページを参照してください。

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

パッケージ化されていない WinUI 3 アプリは、ユーザーのコンピューターにインストールされているWindows アプリ SDK ランタイムによって異なります。 ランタイムが存在することを確認するには、次の 2 つのオプションがあります。

Option 1: Windows アプリ SDK ランタイム インストーラー (.exe) (推奨)

Windows アプリ SDK ランタイム インストーラーをアプリと共に含めます。 ランタイム インストーラーは、必要なWindows アプリ SDKランタイム パッケージをインストールする再頒布可能.exeです。 Windows アプリ SDK リリース ページ独自のインストーラーまたはセットアップ スクリプトとバンドルします。 完全なガイダンスについては、「パッケージ化されていないアプリまたは外部の場所にあるアプリのためのWindows アプリ SDKランタイムの使用方法を参照してください。

ユーザーはランタイム インストーラーを 1 回実行する必要があります。 後続のアプリの更新では、必要なWindows アプリ SDKバージョンが変更されない限り、ランタイムの再インストールは必要ありません。

オプション 2: 自己完結型のデプロイ

プロジェクト ファイル<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>を設定して、Windows アプリ SDK ランタイムをアプリの出力フォルダーに直接バンドルします。 これにより、ランタイムの依存関係が削除されます。ユーザーは個別に何もインストールする必要はありません。

<PropertyGroup>
  <WindowsPackageType>None</WindowsPackageType>
  <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
</PropertyGroup>

トレードオフ: 出力フォルダーが大幅に大きくなり (完全なランタイムが含まれています)、各アプリの更新には完全なランタイム ペイロードが含まれます。 このオプションは、単純な配布シナリオや、ターゲット コンピューターにインストールされる内容を制御できない場合に使用します。

Windows アプリ SDK を使用するパッケージ化されていないアプリをデプロイして、完全なランタイム デプロイ リファレンスを作成します。

単一ファイル EXE の制限

Important

パッケージ化されていない WinUI 3 アプリは、単一ファイル EXE として発行できません。 Windows アプリ SDK ランタイムと複数の WinUI 3 依存関係は、個別のファイルとして存在する必要があります。.NETの単一ファイル発行機能では、それらを 1 つの実行可能ファイルにバンドルすることはできません。

シナリオで単一ファイル配布エクスペリエンスが重要な場合は、次の方法を検討してください。

  • MSIX パッケージ化を使用する - ユーザーは 1 つのインストーラー エクスペリエンスを取得し (アプリ インストーラーはすべてのファイルを処理します)、ストアの適格性、パッケージ ID、および組み込みの更新プログラムを取得します
  • 従来のインストーラー (WiX、Inno Setup) を使用 する - 必要なすべてのファイルを透過的に抽出してインストールする単一の EXE インストーラーで出力フォルダーをラップします
  • 別のフレームワークを使用する — WPF と WinForms アプリは単一ファイルEXEを生成できますが、一部のネイティブ依存関係は実行時に抽出される場合があります

パッケージ化されていないアプリの配布に関する考慮事項

パッケージ化されていない WinUI 3 アプリにはパッケージ ID がないため、特定のWindows機能にアクセスできないことを意味します。

  • App Installer または Windows Store を使用した自動更新なし
  • パッケージ マニフェストを使用してバックグラウンド タスクを登録しない
  • パッケージ マニフェストを使用してファイルの種類の関連付けやプロトコル ハンドラーを使用しない
  • パッケージ マニフェストを使用したスタート メニュー タイルのカスタマイズなし

これらの機能が必要な場合は、完全な MSIX 変換を必要とせずにパッケージ ID を追加する中間パスとして 、外部の場所 でパッケージ化することを検討してください。

最初の Windows アプリを公開することで、WinUI 3 およびその他の Windows アプリ フレームワークの配布オプションの完全な概要を得ることができます。