Windows アプリ: パッケージ化、デプロイ、プロセス

このトピックでは、次に関するオプションについて説明します。

  • アプリに使用するパッケージ化オプション (パッケージ化、外部の場所でパッケージ化、またはパッケージ化解除)。
  • アプリの展開/配布方法と、アプリのインストール方法。
  • アプリの実行時プロセス (分離の方法や、アプリで使用できる API など)。

これらの決定は、新規アプリと既存アプリの両方に対して行うことができます。 ただし、新しいアプリの計画段階にある場合は、上記の考慮事項を検討する前に、まず、アプリに使用する開発プラットフォームとユーザー インターフェイス (UI) フレームワークを決定します。 その決定については、「 Windows 開発オプションの概要」を参照してください。

パッケージ化オプション: パッケージ化、外部の場所を指定したパッケージ化、または非パッケージ化

アプリに使用するパッケージ オプションの決定は、最初に パッケージ ID と呼ばれる概念によって決まります。 多くのWindows機能拡張機能 (バックグラウンド タスク、バックグラウンド配信または COM アクティブ化を使用するプッシュ通知シナリオ、カスタム コンテキスト メニュー拡張機能、および共有ターゲット) は、オペレーティング システム (OS) が対応する API の呼び出し元を識別できる必要があるため、そのアプリが実行時にパッケージ ID を持っている場合にのみ、アプリで使用できます。 パッケージ ID を持つのは、パッケージ化されたアプリ ( 外部の場所でパッケージ化されたアプリを含む) のみです。

パッケージ化、外部の場所でパッケージ化されたモデル、およびパッケージ化されていないモデルの完全な説明と、それらの選択方法については、「 パッケージ化の概要」を参照してください。 パッケージ ID に依存する機能については、「パッケージ ID を 必要とする機能」を参照してください。

アプリをパッケージ化またはパッケージ化解除として構成する方法については、以下を参照してください。

  • WinUI 3 アプリ (Windows アプリ SDK)Visual Studio プロジェクト プロパティを確認し、プロジェクト プロパティを参照してください。また、最初の WinUI (Windows アプリ SDK) プロジェクトの作成を参照してください。
  • デスクトップ アプリ「MSIX パッケージ用のデスクトップ アプリを設定する」を参照してください。
  • ユニバーサル Windows プラットフォーム (UWP) アプリ。 UWP アプリは既にパッケージとして構成されています。構成を変更することはできません。

このトピックの「Windows パッケージ マネージャーと WinGet クライアント」セクションも参照してください。

展開/配布/インストール

パッケージ化されたアプリは、MSIX を使用してパッケージ化およびインストールされます。 外部の場所を使用してパッケージ化することを選択した場合、これは "bring-your-own-installer" モデルであるため、インストーラーは引き続き自分で動作します (外部の場所でパッケージ化してパッケージ ID を付与するを参照してください)。 パッケージ化されていないアプリには、MSIX がまったく含まれません。

MSIX はユーザーにクリーン インストール、アンインストール、更新エクスペリエンスを提供し、増分更新と自動更新をサポートし、Microsoft Storeによって最適化され、Azure Virtual Desktop用の MSIX アプリアタッチと連携し、署名時の強力な改ざん防止の利点があるため、パッケージ化が重要です。

デプロイと配布のガイダンスについては、「パッケージと展開の概要」および「配布パスの選択」を参照してください。 このトピックの「Windows パッケージ マネージャーと WinGet クライアント」セクションも参照してください。

AppContainer または Medium IL

AppContainer でアプリを実行するかどうかは、セキュリティの問題です。 AppContainer アプリのプロセスとその子プロセスは、軽量アプリ コンテナー内で実行されます。このコンテナーは、明示的に付与されたリソースのみをaccessできます。 また、ファイル システムとレジストリの仮想化を使用して分離されています。 その結果、AppContainer に実装されたアプリをハッキングして、割り当てられた限られたリソースの外部で悪意のあるアクションを許可することはできません。

パッケージ化されたアプリまたはパッケージ化されていないアプリは、AppContainer で実行するように構成できます。 ただし、パッケージ化されたアプリの場合、プロセスはより簡単です。 アプリが AppContainer アプリでない場合は、 Medium IL アプリです。

詳細については、レガシ アプリ用 AppContainerMSIX AppContainer アプリ に関するページを参照してください。

AppContainer または Medium IL で実行するようにアプリを構成する方法については、以下を参照してください。

  • WinUI アプリ (Windows アプリ SDK)uap10:TrustLevel アプリ パッケージ マニフェスト属性を参照してください。
  • デスクトップ アプリTrustLevel Visual Studio project プロパティを参照してください (アプリの種類に適したセクション)。
  • ユニバーサル Windows プラットフォーム (UWP) アプリ。 UWP アプリは、AppContainer で実行するように既に構成されています。構成を変更することはできません。

パッケージ化されていないアプリにはアプリ パッケージ マニフェストがないことを思い出してください。 そのため、パッケージ化されていないアプリの場合は、アプリ パッケージ マニフェストではなく、project ファイルで AppContainer またはMedium-IL の決定を宣言します。

Win32 アプリの分離

Win32 アプリの分離は、セキュリティ機能 (Windows 11 バージョン 24H2 以降で利用可能) であり、アプリが侵害された場合の損害を抑え、ユーザーのプライバシーの選択を保護します。 リソースを仮想化し、仲介型アクセスを提供する AppContainers とコンポーネントに基づいています。 詳細については、Win32 アプリの分離の概要 および Win32 アプリの分離GitHub リポジトリを参照してください。

アプリの機能

アプリの機能 (internetClient、場所、マイク、Bluetooth など) は、 AppContainer で実行されるパッケージ アプリに主に関連します。 そのため、all ユニバーサル Windows プラットフォーム (UWP) アプリと、some デスクトップ アプリが含まれます。

ただし、中 IL アプリ (つまり、AppContainer アプリ ではない ) でも機能を宣言する必要があるシナリオがいくつかあります。 1 つの例として、 runFullTrust の制限付き機能があります。

アプリの機能、適用するアプリの種類、およびアプリの構成方法の詳細については、「 アプリ機能の宣言」を参照してください。 アプリ パッケージ マニフェストで機能を構成します。そのため、パッケージアプリにのみ適用されます。

アプリの種類

デスクトップ アプリとユニバーサル Windows プラットフォーム (UWP) アプリは 2 つの主要な種類のアプリですが、デスクトップ アプリ ファミリにはいくつかの種類のアプリがあります。 UI フレームワーク (WinForms、WPF、Win32、Direct 2D/3D、または WinUI 3) の選択は、このトピックで説明する構成に依存しない程度です。

しかし、パッケージ化、デプロイ、プロセスの観点から、これらのアプリの種類が互いにどのように異なるかを見てみましょう。

まず、すべての UWP アプリがパッケージ化され、AppContainer で実行されます。 ただし、デスクトップ アプリの場合は、柔軟性が高くなります。 デスクトップ アプリをパッケージ化するかどうかは選択できます。 また、その決定とは別に、デスクトップ アプリを AppContainer または Medium IL アプリとして構成することもできます。

梱包済み Unpackaged
AppContainer デスクトップ アプリ
UWP アプリ
デスクトップ アプリ
ミディアム IL デスクトップ アプリ デスクトップ アプリ

パッケージ アプリの場合、目的のアプリの種類を構成するには、アプリ パッケージ マニフェストで uap10:RuntimeBehavior 属性を使用します (Application (Windows 10) を参照)。

  • デスクトップ アプリ は Windows .exeであり、通常は メイン または WinMain エントリ ポイント関数を使用します。 アプリをデスクトップ アプリとして構成するには、 uap10:RuntimeBehavior を "packagedClassicApp" または "win32App" に設定します。
    • 値 "packagedClassicApp" は、WinUI アプリ (Windows アプリ SDK) またはデスクトップ ブリッジ アプリ (Centennial) を示します。 違いは、100 周年記念アプリが AppContainer で実行される点です。
    • "win32App" は、他の種類の Win32 アプリ (外部の場所でパッケージ化されたアプリを含む) を示します。
  • 最後に、 uap10:RuntimeBehavior を "windowsApp" に設定すると、UWP アプリが提供されます。

開発できるアプリの種類のすべてのオプションについては、「Windows app開発: オプションと機能を参照してください。

Windows アプリ SDK: フレームワーク依存または自己完結型

アプリでWindows アプリ SDKを使用する場合は、アプリが依存する SDK ランタイムをデプロイする方法も選択します。フレームワークに依存します (既定では、Windows アプリ SDK ランタイムやフレームワーク パッケージがターゲット コンピューターに存在する必要があります)、自己完結型 (アプリはそれにWindows アプリ SDK依存関係を持ちます)。 詳細については、Windows アプリ SDKデプロイの概要を参照してください。

Windows パッケージ マネージャーと WinGet クライアント

package managerは、ユーザーがワークフローを自動化してソフトウェアのインストール、アップグレード、構成を行うのに役立ちます。 パッケージ マネージャーは任意のソフトウェアのインストールに役立ちますが、ほとんどの場合、developer toolsをインストールするために使用される傾向があります。 したがって、開発者ツールを構築している場合は、このオプションに特に関心があるかもしれません。 ただし、そのしくみを次に示します。

  • お客様は、ソフトウェア開発者として、製品の正常なインストールに必要なすべての要素を (宣言命令の形式で) package managerに定義します。
  • ユーザーがソフトウェアをインストールすると、package managerは宣言型の指示に従って、インストールと構成のワークフローを自動化します。

その結果、ユーザーの環境の準備に費やされる時間が短縮され、インストールされているコンポーネント間の互換性が向上します。 また、Windows パッケージ マネージャー を使用して、パッケージ化されたアプリまたはパッケージ化されていないアプリを、.msix.msi.exe などの形式で配布できます。

詳細については、「Windows パッケージ マネージャーを参照してください。