Freigeben über


MSIX AppContainer-Apps

Das Thema AppContainer für ältere Anwendungen deckt alle notwendigen Hintergrundinformationen darüber ab, was die AppContainer-Umgebung ist und welche Vorteile sie bietet; dieses Thema enthält auch C#- und C++-Codebeispiele zum Testen, ob ein Prozess innerhalb eines AppContainers läuft oder nicht.

Das Thema, das Sie gerade lesen, zeigt Ihnen, wie Sie eine mit MSIX verpackte App einfach so konfigurieren können, dass sie in der AppContainer-Umgebung (in einem leichtgewichtigen App-Container) läuft. Universelle Windows-Plattform(UWP)-Apps sind automatisch AppContainer-Apps. Sie können aber auch Ihre Desktop-App, die mit MSIX verpackt ist, als AppContainer-App konfigurieren.

Der Prozess einer AppContainer-App und seine untergeordneten Prozesse werden in einem einfachen App-Container ausgeführt, in dem sie nur auf die Ressourcen zugreifen können, die ihnen speziell gewährt werden. Und sie sind isoliert mit Dateisystem- und Registrierungsvirtualisierung. Daher können Apps, die in einem AppContainer implementiert sind, nicht gehackt werden, um bösartige Aktionen außerhalb der begrenzten zugewiesenen Ressourcen zu ermöglichen.

Tipp

Eine entpackte App kann auch in einem App-Container ausgeführt werden. Die Verwendung von AppContainer ist besonders einfach, wenn Sie gleichzeitig MSIX verwenden. Alle in diesem Thema beschriebenen Szenarien beziehen sich also auf verpackte Apps.

Konfigurieren eines WinUI 3-Projekts für AppContainer

Die Schritte in der Ein neues Projekt für eine verpackte C#- oder C++-WinUI 3-Desktop-App zeigen die Standard- und empfohlene Methode zum Erstellen eines neuen WinUI 3-Projekts auf.

Standardmäßig enthält die Datei des Package.appxmanifest-Projekts die Konfiguration für ein voll vertrauenswürdiges Paket (d. h. mittlerer Integritätsebene). Die relevanten Abschnitte sehen wie folgt aus:

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

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

Um das Paket als AppContainer-App zu konfigurieren, können Sie das EntryPoint-Attribut bearbeiten und die Deklaration der eingeschränkten Funktionen entfernen (aber das Funktions-Element beibehalten). Dies sieht folgendermaßen aus:

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

<Capabilities/>
...

Wenn Ihr Paket unter Windows 10, Version 2004 (10.0; Build 19041) und/oder höher, installiert wird, können Sie anstelle von EntryPointuap10:TrustLevel und uap10:RuntimeBehavior nutzen (nachdem Sie das XML-Namespace-Präfix wie oben beschrieben deklariert haben). Dies sieht folgendermaßen aus:

<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/>
...

Weitere Informationen finden Sie unter folgenden Themen:

Konfigurieren Sie eine WinUI 3 Zwei-Projekt-Lösung für AppContainer

Im vorigen Abschnitt wurde das Verfahren für MSIX-Einzelprojekte beschrieben, das wir empfehlen und das die Standardeinstellung für neue WinUI 3-Projekte ist. Weitere Informationen finden Sie unter Verpacken Ihrer App mithilfe von MSIX mit nur einem Projekt.

Möglicherweise verfügen Sie jedoch über ein WinUI 3-Projekt, das aus der Zeit vor der Einführung der MSIX-Einzelprojektfunktion stammt. In diesem Fall haben Sie zwei Projekte in Ihrer Lösung – Ihr App-Projekt sowie ein zusätzliches Paketerstellungsprojekt für Windows-Anwendungen. Wenn Sie Ihr Projekt auf MSIX als Einzelprojekt migrieren können, dann ist das ideal. Folgen Sie dazu den Anweisungen im vorherigen Abschnitt. Weitere Informationen finden Sie unter Verpacken Ihrer App mithilfe von MSIX mit nur einem Projekt.

Wenn Sie Ihr Projekt nicht auf MSIX als Einzelprojekt migrieren können, beschreibt dieser Abschnitt, wie Sie Ihr Paket so konfigurieren, dass es eine AppContainer-App enthält.

Ein Paketerstellungsprojekt für Windows-Anwendungen impliziert eine Standardeinstellung, die die Konfiguration in Package.appxmanifest außer Kraft setzt. Das Projekt verhält sich so, als ob die Eigenschaft TrustLevel in der Projektdatei den Wert Voll hätte.

Um diesen impliziten Eigenschaftswert zu korrigieren, erweitern Sie den Knoten Dependencies>Applications des Verpackungsprojekts und wählen Sie den Knoten aus, der den Verweis auf Ihr WinUI 3-Projekt darstellt. Wählen Sie dann im Fenster Eigenschaften von Visual Studio (nicht Projekteigenschaften) für die Eigenschaft Vertrauensebene den Wert Teilweise vertrauenswürdig aus.

Die Projektdatei für das Verpackungsprojekt enthält jetzt diese explizite Eigenschaft,

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

sodass Sie jetzt aus der <rescap:Capability Name="runFullTrust" />-Datei des Verpackungsprojekts Package.appxmanifest entfernen können.

Konfigurieren eines Windows-Anwendungsprojekts (C++ Win32 WndProc-Typ-App) für AppContainer

Dieser Abschnitt richtet sich an Sie, wenn Sie über ein C++-Win32-WndProc-Projekt verfügen, das mit der Projektvorlage Windows-Anwendungsprojekt erstellt worden ist. Der erste Schritt besteht ganz einfach darin, Ihrer Lösung ein C++-Windows-Anwendungsprojekt hinzuzufügen. Weitere Details zu den genauen Schritten erfahren Sie unter Ausrichten Ihrer Desktopanwendung auf MSIX-Verpackungen in Visual Studio. Dieses Thema gilt für Desktop-Apps, die in C++ oder C# geschrieben wurden.

Öffnen Sie dann die Projektdatei des neuen Paketprojekts, und fügen Sie der vorhandenen Projektreferenz-Eigenschaft eine Vertrauensebenen-Eigenschaft wie folgt hinzu:

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

Beim Erstellen wird möglicherweise der Fehler „Fehler APPX1673: Dem App-Manifest fehlt das erforderliche Element „TelefonIdentität“ angezeigt. Wenn dies der Fall ist, bearbeiten Sie die Package.appxmanifest-Projektdatei wie folgt:

<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>
...

Konfigurieren eines WPF- oder WinForms-Projekts für AppContainer

Dieser Abschnitt ist für Sie relevant, wenn Sie über eine der folgenden Optionen verfügen:

  • ein Windows Presentation Foundation (WPF)-App-Projekt, das mit der C#-Projektvorlage WPF-Anwendung erstellt wurde. Dadurch erhalten Sie ein .NET-Projekt; das sich von der Projektvorlage durch den Namen WPF-App (.NET Framework) unterscheidet; oder
  • ein Windows Forms (WinForms)-App-Projekt, das mit der C#-Projektvorlag Windows Forms App erstellt wurde. Dadurch erhalten Sie ein .NET-Projekt; das sich von der Projektvorlage durch den Namen Windows Forms-App (.NET Framework) unterscheidet;

Der erste Schritt besteht ganz einfach darin, Ihrer Lösung ein C#-Windows-Anwendungsprojekt hinzuzufügen. Weitere Details zu den genauen Schritten erfahren Sie unter Ausrichten Ihrer Desktopanwendung auf MSIX-Verpackungen in Visual Studio.

Erweitern Sie den Knoten Dependencies>Applications des Verpackungsprojekts und wählen Sie den Knoten aus, der den Verweis auf Ihr WPF- oder WinForms-Projekt darstellt. Wählen Sie dann im Fenster Eigenschaften von Visual Studio (nicht Projekteigenschaften) für die Eigenschaft Vertrauensebene den Wert Teilweise vertrauenswürdig aus.