次の方法で共有


MSIX AppContainer アプリ

従来の アプリケーションの AppContainer のトピックでは、AppContainer 環境とその利点に関する必要なすべての背景情報について説明します。このトピックには、プロセスが AppContainer 内で実行されているかどうかをテストするための C# と C++ のコード例も含まれています。

ここで読んでいるトピックでは、MSIX を使用してパッケージ化されたアプリを取得し、AppContainer 環境 (軽量アプリ コンテナー内) で実行するように簡単に構成する方法を示します。 ユニバーサル Windows プラットフォーム (UWP) アプリは、自動的に AppContainer アプリになります。 ただし、MSIX と共にパッケージ化されたデスクトップ アプリを AppContainer アプリとして構成することもできます。

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

ヒント

パッケージ化されていないアプリは、AppContainer でも実行できます。 ただし、MSIX を使用してパッケージ化する場合は、AppContainer を使用するのは特に簡単です。 そのため、このトピックで説明するシナリオはすべて、パッケージ アプリに関するシナリオです。

AppContainer 用に WinUI 3 プロジェクトを構成する

「パッケージ化された C# または C++ WinUI 3 デスクトップ アプリの新しいプロジェクトを作成する」の手順では、新しい WinUI 3 プロジェクトを作成するための既定の推奨される方法が示されています。

既定では、プロジェクトの Package.appxmanifest ファイルには、完全信頼 (つまり、中程度の整合性レベル) パッケージの構成が含まれています。 関連するセクションは次のようになります。

...
<Applications>
  <Application ...
    EntryPoint="$targetentrypoint$">
    ...
  </Application>
</Applications>

<Capabilities>
  <rescap:Capability Name="runFullTrust" />
</Capabilities>
...

AppContainer アプリを含むパッケージとしてパッケージを構成するには、 EntryPoint 属性を編集し、制限された機能宣言を削除します ( ただし、Capabilities 要素は保持します)。 このように:

...
<Applications>
  <Application ...
    EntryPoint="windows.partialTrustApplication">
    ...
  </Application>
</Applications>

<Capabilities/>
...

パッケージが Windows 10 バージョン 2004 (10.0;ビルド 19041) 以降では、 EntryPoint を設定する代わりに、 uap10:TrustLeveluap10:RuntimeBehavior を設定できます (次に示すように、XML 名前空間プレフィックスを宣言した後)。 このように:

<Package ...
  xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
  ...>
...
  <Applications>
    <Application ...
      EntryPoint="$targetentrypoint$"
      uap10:TrustLevel="appContainer"
      uap10:RuntimeBehavior="packagedClassicApp">
      ...
    </Application>
  </Applications>

  <Capabilities/>
...

詳細については、次のトピックを参照してください。

AppContainer 用に WinUI 3 2 プロジェクト ソリューションを構成する

前のセクションでは、単一プロジェクト MSIX のプロセスについて説明しましたが、これは推奨されており、新しい WinUI 3 プロジェクトの既定値です。 詳細については、「 単一プロジェクト MSIX を使用してアプリをパッケージ化する」を参照してください。

ただし、単一プロジェクトの MSIX 機能が導入される前の WinUI 3 プロジェクトがある場合があります。 その場合、ソリューションには、アプリ プロジェクトと追加の Windows アプリケーション パッケージ プロジェクトという 2 つのプロジェクトがあります。 プロジェクトを単一プロジェクトの MSIX に移行できる場合は、それが理想的です。 また、前のセクションのガイダンスに従うことができるようになります。 詳細については、「 単一プロジェクト MSIX を使用してアプリをパッケージ化する」を参照してください。

プロジェクトを単一プロジェクトの MSIX に移行 できない 場合、このセクションでは、AppContainer アプリを含むパッケージを構成する方法について説明します。

Windows アプリケーション パッケージ プロジェクトは、Package.appxmanifestの構成をオーバーライドする既定の設定を意味します。 プロジェクトは、プロジェクト ファイルに値 Full に設定された TrustLevel プロパティがあるかのように動作します。

暗黙的なプロパティ値を修正するには、パッケージ 化プロジェクトの Dependencies>Applications ノードを展開し、WinUI 3 プロジェクトへの参照を表すノードを選択します。 次に、Visual Studio の [プロパティ] ウィンドウ (プロジェクトのプロパティではなく) で、[ 信頼レベル ] プロパティの [ 部分信頼] の値を選択します。

パッケージ 化プロジェクトのプロジェクト ファイルに、次の明示的なプロパティが含まれるようになりました。

...
<ItemGroup>
  <ProjectReference Include="...">
    <TrustLevel>Partial</TrustLevel>
  </ProjectReference>
</ItemGroup>
...

パッケージ プロジェクトのPackage.appxmanifest ファイルから<rescap:Capability Name="runFullTrust" />を削除できるようになりました。

AppContainer 用に Windows アプリケーション プロジェクト (C++ Win32 WndProc 型アプリ) を構成する

このセクションは、 Windows アプリケーション プロジェクト プロジェクト テンプレートを使用して作成された C++ Win32 WndProc 型プロジェクトがある場合に適しています。 簡単に言うと、最初の手順は、ソリューションに C++ Windows アプリケーション パッケージ プロジェクトを追加することです。 正確な手順の詳細については、「 Visual Studio で MSIX パッケージ用のデスクトップ アプリケーションを設定する」を参照してください。 このトピックは、C++ または C# で記述されたデスクトップ アプリに適用されます。

次に、新しいパッケージ プロジェクトのプロジェクト ファイルを開き、次のように既存の ProjectReference プロパティに TrustLevel プロパティを追加します。

...
<ItemGroup>
  <ProjectReference Include="...">
    <TrustLevel>Partial</TrustLevel>
  </ProjectReference>
</ItemGroup>
...

ビルドすると、"error APPX1673: App manifest is missing required element 'PhoneIdentity'" (エラー APPX1673: アプリ マニフェストに必須要素 'PhoneIdentity' がありません) というエラーが表示されることがあります。 その場合は、次のようにプロジェクトの Package.appxmanifest ファイルを編集します。

<Package ...
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  ...>
...
  <mp:PhoneIdentity
      PhoneProductId="A GUID in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx."
      PhonePublisherId="A GUID in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.">
  </mp:PhoneIdentity>
...

AppContainer 用に WPF または WinForms プロジェクトを構成する

このセクションは、次のいずれかの場合に適しています。

  • C# WPF アプリケーション プロジェクト テンプレートを使用して作成された Windows Presentation Foundation (WPF) アプリ プロジェクト。 これで.NET プロジェクトが作成されます。WPF アプリ (.NET Framework) という名前のプロジェクト テンプレートとは異なります。 または
  • C# Windows フォーム アプリ プロジェクト テンプレートを使用して作成された Windows フォーム(WinForms) アプリ プロジェクト。 これで.NET プロジェクトが作成されます。Windows フォーム アプリ (.NET Framework) という名前のプロジェクト テンプレートとは異なります。

簡単に言うと、最初の手順は、ソリューションに C# Windows アプリケーション パッケージ プロジェクトを追加することです。 正確な手順の詳細については、「 Visual Studio で MSIX パッケージ用のデスクトップ アプリケーションを設定する」を参照してください。

次に、パッケージ 化プロジェクトの Dependencies>Applications ノードを展開し、WPF または WinForms プロジェクトへの参照を表すノードを選択します。 次に、Visual Studio の [プロパティ] ウィンドウ (プロジェクトのプロパティではなく) で、[ 信頼レベル ] プロパティの [ 部分信頼] の値を選択します。