パッケージ化されていない配布を使用すると、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 要素を見つけます。この要素には、OutputType、TargetFramework、その他のプロパティも含まれています。
-
WindowsPackageTypeproject プロパティをこの PropertyGroup 要素に追加します。 その値をNoneに設定します。
<Project ...>
...
<PropertyGroup>
<WindowsPackageType>None</WindowsPackageType><!-- add this -->
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
...
</PropertyGroup>
...
</Project>
Visual Studio (.exe) Windows起動する場合は必要ありません。
ブートストラッパー 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です。
ユーザーはランタイム インストーラーを 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 アプリ フレームワークの配布オプションの完全な概要を得ることができます。
Windows developer