パッケージ化は、アプリのインストール、更新、およびWindowsとの統合方法を定義します。 WinUI 3 アプリは既定でパッケージ化されますが、従来の Win32 アプリケーションなどの多くのデスクトップ アプリはパッケージ化されていない状態で実行されます。 パッケージアプリとパッケージ化されていないアプリのどちらを選択するかは、使用できる機能、依存するデプロイ モデル、顧客が得る全体的なエクスペリエンスに影響します。
注
新しい WinUI 3 アプリをビルドしますか? 既定で既にパッケージ化されています。 以下のガイダンスは、明示的な選択を行う必要がある開発者に最も関連しています。通常は、既存のアプリの移植、エンタープライズ コンピューターへのデプロイ、最初にパッケージ化されていないアプリへのWindows機能の追加を行う場合です。
アプリのパッケージ化が重要な理由
パッケージ アプリは、クリーン インストール モデル、自動更新、およびバックグラウンド タスク、通知、コンテキスト メニュー拡張機能、共有ターゲット、その他の拡張ポイントなど、パッケージ ID を必要とするWindows機能へのアクセスを利用できます。 パッケージ化は、Microsoft Storeやエンタープライズ展開ツールなどのチャネルを通じて、よりクリーンな展開、信頼性の高い更新プログラム、合理化された配布を保証するのにも役立ちます。
パッケージ ID が必要な機能
これらのWindows機能は、パッケージIDを持つアプリでのみ機能します。完全なMSIXパッケージ化、または外部の場所を使用したパッケージ化(スパースパッケージ化)によって実現できます。
| 特徴 | 説明 |
|---|---|
| バックグラウンド タスク | アプリがフォアグラウンドでないときにコードを実行します。たとえば、データの同期、ダウンロードの処理、システム イベントへの応答などです。 |
| Windows AI API (Phi Silica、OCR など) | ローカル言語モデル、テキスト認識、画像分析などのデバイス上の AI 機能にアクセスします。 |
| プッシュ通知 (WNS) | Windows Notification Service を使用して、クラウド サービスからリアルタイム通知を受信します。 |
| 共有ターゲット | システム共有シートを使用して、ユーザーが他のアプリのコンテンツを直接自分のアプリに共有できるようにします。 |
| カスタム コンテキスト メニュー拡張機能 | エクスプローラーやその他のシェル サーフェスの右クリック メニューにアプリのアクションを追加します。 |
| ファイルの種類とプロトコルの関連付け | 特定のファイルの種類または URI プロトコル (たとえば、 yourapp://) のハンドラーとしてアプリを登録します。 |
| スタートアップ タスク | ユーザーがWindowsにサインインすると、アプリが自動的に起動します。 |
| アプリ サービス | 他のアプリが呼び出すことができるバックグラウンド サービスを公開し、アプリ間通信を有効にします。 |
ヒント
Windows API を呼び出すときにパッケージ化を解除して E_ILLEGAL_METHOD_CALL または APPMODEL_ERROR_NO_PACKAGE エラーが発生した場合は、それがパッケージ ID の要件です。 最も摩擦の少ない修正プログラムとして 、外部の場所を使用したパッケージ化 (スパース パッケージ) を参照してください。
詳細については、「 パッケージ ID を必要とする機能」を参照してください。
モデルをひとめでパッケージ化する
| Model | パッケージ ID | インストーラー | 対象となるストア | 最適な用途 |
|---|---|---|---|---|
| パッケージ化 (MSIX) | ✅ はい | MSIX がインストーラーを置き換える | ✅ はい | 新しいアプリ, ストアの発行, エンタープライズ MDM |
| 外部の場所を使用したパッケージ化 | ✅ はい | 既存のインストーラー | ❌ いいえ | 独自のインストーラーを持つ既存のアプリ、独立系ソフトウェアベンダー (ISV) |
| 梱包されていない | ❌ いいえ | XCopy / スクリプト | ❌ いいえ | 内部ツール、開発ユーティリティ、単純なシナリオ |
パッケージ アプリ (MSIX)
パッケージ 化されたアプリは MSIX を使用し、package ID を持ちます。これは、多くのWindows拡張ポイントに必要です。 パッケージ ID を使用すると、Windowsがプラットフォーム API の呼び出し元を確実に識別できるため、これらの機能はそれに依存しています。
- パッケージ 化されたアプリは、通常、ファイル システムとレジストリの仮想化を備えた軽量のアプリ コンテナーで実行されます (レガシ アプリと MSIX AppContainer アプリの AppContainer を参照)。
- 必要に応じて、アプリ コンテナーで実行 しないように アプリを構成することもできます。
- MSIX はパッケージ化とインストールの両方に使用されます ( MSIX とはを参照してください)。
外部の場所を使用したパッケージ化 (スパース パッケージ)
外部の場所 ( スパース パッケージとも呼ばれます) を使用してパッケージ化すると、インストーラー、バイナリの場所、または更新プロセスを変更することなく、既存のアプリと共に小さな ID パッケージを登録できます。 Windows 10 バージョン 2004 (ビルド 19041) で導入されました。
これは、独自のインストーラー (NSIS、WiX、InstallShield など) を介して出荷され、MSIX に置き換えたくない既存の Win32/WPF/WinForms アプリのスイート スポットです。 軽量 ID パッケージを登録すると、バイナリはそのままの場所に留まり、パッケージ ID ゲートによって制御されているWindows機能の完全なセットを解除できます。
| 能力 | MSIX | 外部の場所 |
|---|---|---|
| インストーラーを置き換えます | はい | いいえ |
| パッケージ内のバイナリ | はい | いいえ (外部) |
| 対象となるストア | はい | いいえ |
| パッケージ ID | はい | はい |
| 更新メカニズム | MSIX の更新 | 既存のメカニズム |
→完全なチュートリアル: 外部の場所でパッケージ化してパッケージ ID を付与する
パッケージ化されていないアプリ
パッケージ化されていないアプリは MSIX を使用せず、 パッケージ ID も持っていません。つまり、上記の機能にアクセスできません。
- これらは、API サーフェス、ファイル システムへのアクセス、レジストリへのアクセス、管理者権限の昇格、およびプロセス モデルに関して、全く制限されていません。
- インストールと更新は、
.exe、.msi、カスタム インストーラー、ClickOnce、または xcopy 配置に依存します。
パッケージ化解除にコミットする前に、 上記の機能の表 をロードマップと照らして確認してください。 通知、バックグラウンド タスク、または AI API が提供される場合は、パッケージ化の開始を検討してください。
シナリオ別に選択する
| シナリオ | 推奨されるモデル | 詳細情報 |
|---|---|---|
| パッケージ化済み (MSIX) | ストアには MSIX が必要です。 WinUI 3 アプリは既定でパッケージ化されており、変更は必要ありません。 パッケージ アプリの配布→ | |
| 既存のインストーラー用のパッケージまたは外部の場所 | 新しいアプリでは MSIX を使用する必要があります。 独自のインストーラーを持つ既存のアプリでは、外部の場所でパッケージ化を使用できます。 パッケージ アプリの展開→ | |
| 独自のインストーラーを使用して直接ダウンロードを出荷する ISV | 外部の場所でのパッケージ化 | 既存のインストーラーと共に軽量 ID パッケージを登録します。 ユーザーに変更は表示されません。Windows機能を利用できます。 → パッケージ ID の付与 |
| 内部ツールまたは開発者ユーティリティ | Unpackaged | ビルドとデプロイが最も簡単です。 Windows アプリ SDKは NuGet 経由で動作しますが、一部の機能は使用できません。 |
フレームワークに依存するデプロイと自己完結型のデプロイ
パッケージ 化モデルとは別に、Windows アプリ SDKを使用するアプリは、ランタイムの依存関係を伝達する方法を選択します。
- フレームワーク依存: Windows アプリ SDK ランタイムはユーザーのコンピューターにインストールされている必要があります。 アプリのフットプリントが小さいのは、ランタイムが存在するか自動インストールされることに依存しているためです。
- 自己完結型: すべてのWindows アプリ SDK バイナリはアプリに付属しています。 より大きなフットプリント。外部ランタイムの要件はありません。 ロックダウンされたエンタープライズ環境に適しています。
MSIX を使用して始めましょう
Win32 デスクトップ アプリ (classic デスクトップ アプリ とも呼ばれます) または.NET アプリ (Windows Presentation Foundation (WPF) や Windows フォーム (WinForms) など) をビルドする場合は、MSIX を使用してアプリをパッケージ化して展開できます。
その他のインストール テクノロジ
- アプリケーションのインストールとサービス
- Windows Installer
- .NET アプリケーションの発行の概要
- .NET Framework とアプリケーションのデプロイ
- WPF アプリケーションのデプロイ
- ClickOnce Deployment for Windows フォーム
関連するコンテンツ
- パッケージ ID の概要
- パッケージ アプリのデプロイ (Windows アプリ SDK)
パッケージ化されていないアプリ (Windows アプリ SDK) - チュートリアル: WinUI アプリのパッケージ化を解除する
Windows developer