MSIX AppContainer-apps

Belangrijk

Als u ervoor zorgt dat DeploymentManager.Initialize wordt aangeroepen voor elk proces dat wordt uitgevoerd in de AppContainer, moet uw app de packageManagementbeperkte functionaliteit in het pakketmanifest declareren. Zie De automatische initialisatiefunctie van Deployment Manager voor meer informatie.

Het onderwerp AppContainer voor verouderde toepassingen bevat alle benodigde achtergrondinformatie over wat de AppContainer-omgeving is en wat de voordelen zijn; dit onderwerp bevat ook C#- en C++-codevoorbeelden voor het testen of een proces al dan niet wordt uitgevoerd in een AppContainer.

In het onderwerp dat u nu leest, ziet u hoe u een app kunt gebruiken die is verpakt met MSIX en deze eenvoudig kunt configureren voor uitvoering in de AppContainer-omgeving (in een lichtgewicht app-container). Universal Windows Platform (UWP)-apps zijn automatisch AppContainer-apps. Maar u kunt ook uw bureaublad-app configureren die is verpakt met MSIX als een AppContainer-app.

Het proces van een AppContainer-app en de onderliggende processen worden uitgevoerd in een lichtgewicht app-container, waar ze alleen toegang hebben tot de resources die specifiek aan hen zijn verleend. En ze zijn geïsoleerd met behulp van bestandssysteem- en registervirtualisatie. Als gevolg hiervan kunnen apps die zijn geïmplementeerd in een AppContainer niet worden gehackt om schadelijke acties buiten de beperkte toegewezen resources toe te staan.

Aanbeveling

Uitgepakte apps kunnen ook worden uitgevoerd in een AppContainer. Maar het is vooral eenvoudig om AppContainer te gebruiken als u een pakket met MSIX gebruikt. Alle scenario's die in dit onderwerp worden beschreven, gaan dus over verpakte apps.

Een WinUI 3-project configureren voor AppContainer

In de stappen in Een nieuw project maken voor een verpakte C# of C++ WinUI 3-bureaublad-app wordt de standaard en aanbevolen manier weergegeven om een nieuw WinUI 3-project te maken.

Standaard bevat het Package.appxmanifest-bestand van het project configuratie voor een pakket met volledige vertrouwensrelatie (dat wil zeggen, gemiddeld integriteitsniveau). De relevante secties zien er als volgt uit:

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

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

Als u het pakket wilt configureren als een AppContainer-app, kunt u het EntryPoint-kenmerk bewerken en de declaratie voor beperkte mogelijkheden verwijderen (maar het element Capabilities behouden). Op deze manier:

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

<Capabilities/>
...

Als uw pakket wordt geïnstalleerd op Windows 10, versie 2004 (10.0; Build 19041) en/of hoger, in plaats van EntryPoint in te stellen, kunt u uap10:TrustLevel en uap10:RuntimeBehavior (na het declareren van het voorvoegsel van de XML-naamruimte) instellen. Op deze manier:

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

Zie de volgende onderwerpen voor meer informatie:

Een WinUI 3-oplossing met twee projecten configureren voor AppContainer

In de vorige sectie werd het proces voor MSIX met één project beschreven; wat we aanbevelen en wat de standaardwaarde is voor nieuwe WinUI 3-projecten. Voor meer informatie, zie Uw app verpakken met een enkel project MSIX.

Maar mogelijk hebt u een WinUI 3-project dat dateert van vóór de introductie van de MSIX-functie voor één project. In dat geval hebt u twee projecten in uw oplossing: uw app-project, plus een extra Windows Application Packaging Project. Als u uw project kunt migreren naar enkel-project MSIX, is dat ideaal. En u kunt de richtlijnen in de vorige sectie volgen. Voor meer informatie, zie Uw app verpakken met een enkel project MSIX.

Als u uw project niet kunt migreren naar een MSIX-pakket voor één project, wordt in deze sectie beschreven hoe u uw pakket configureert zodat het een AppContainer-app bevat.

Een Windows Application Packaging Project impliceert een standaardinstelling waarmee de configuratie in Package.appxmanifest wordt overschreven. Het project gedraagt zich alsof er een TrustLevel-eigenschap in het projectbestand is ingesteld op de waarde Volledig.

Als u deze impliciete eigenschapswaarde wilt verhelpen, vouw dan het knooppunt Afhankelijkheden>Toepassingen van het pakketproject uit en selecteer het knooppunt dat de verwijzing naar uw WinUI 3-project vertegenwoordigt. Kies vervolgens in het venster Visual Studio Properties (geen projecteigenschappen) voor de eigenschap Trust Level de waarde van Partial Trust.

Het projectbestand voor het verpakkingsproject bevat nu deze expliciete eigenschap:

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

En u kunt nu <rescap:Capability Name="runFullTrust" /> uit het Package.appxmanifest bestand van het verpakkingsproject verwijderen.

Een Windows Application Project (C++ Win32 WndProc-type app) configureren voor AppContainer

Deze sectie is bedoeld voor u als u een C++ Win32 WndProc-type project hebt die is gemaakt met de sjabloon Windows Application Project project. De eerste stap bestaat uit het toevoegen van een C++ Windows Application Packaging Project aan uw oplossing. Er zijn meer details over de exacte stappen in Uw desktopapplicatie instellen voor MSIX-packaging in Visual Studio. Dit onderwerp is van toepassing op desktop-apps die zijn geschreven in C++ of C#.

Open vervolgens het projectbestand van het nieuwe pakketproject en voeg een TrustLevel-eigenschap toe aan de bestaande eigenschap ProjectReference , zoals deze:

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

Wanneer u bouwt, ziet u mogelijk de fout 'fout APPX1673: App-manifest ontbreekt vereist element PhoneIdentity'. Als dat gebeurt, bewerkt u het bestand van Package.appxmanifest het project als volgt:

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

Een WPF- of WinForms-project configureren voor AppContainer

Deze sectie is geschikt voor u als u een van de volgende opties hebt:

  • een Windows Presentation Foundation (WPF) app-project dat is gemaakt met de projectsjabloon C# WPF Application. Hiermee krijgt u een .NET project; en dit verschilt van de projectsjabloon met de naam WPF App (.NET Framework). Of
  • een Windows Forms (WinForms) app-project dat is gemaakt met de projectsjabloon C# Windows Forms App. Hiermee krijgt u een .NET project. Dit is anders dan de projectsjabloon met de naam Windows Forms App (.NET Framework).

De eerste stap bestaat uit het toevoegen van een C#-Windows Application Packaging Project aan uw oplossing. Er zijn meer details over de exacte stappen in Uw desktopapplicatie instellen voor MSIX-verpakking in Visual Studio.

Vouw vervolgens de Afhankelijkheden>Applicaties uit en selecteer het knooppunt dat verwijst naar uw WPF- of WinForms-project. Kies vervolgens in het venster Visual Studio Properties (geen projecteigenschappen) voor de eigenschap Trust Level de waarde van Partial Trust.