Dela via


MSIX AppContainer-appar

Viktigt!

Om du gör att DeploymentManager.Initialize anropas för alla processer som körs i AppContainer måste appen deklarera den packageManagementbegränsade funktionen i paketmanifestet. För mer information, se Deployment Managers automatinitialiserare.

Ämnet AppContainer för äldre program omfattar all nödvändig bakgrundsinformation om vad AppContainer-miljön är och dess fördelar. det ämnet innehåller även C#- och C++-kodexempel för att testa om en process körs i en AppContainer eller inte.

Det ämne som du läser nu visar hur du kan ta en app som paketeras med MSIX och enkelt konfigurera den att köras i AppContainer-miljön (i en lättviktsappcontainer). Universal Windows Platform (UWP) appar är automatiskt AppContainer-appar. Men du kan också konfigurera din skrivbordsapp som är paketerad med MSIX som en AppContainer-app.

En AppContainer-appprocess och dess underordnade processer körs i en lättviktsappcontainer där de bara kan komma åt de resurser som är specifikt tilldelade till dem. Och de isoleras med hjälp av filsystem och registervirtualisering. Därför kan appar som implementeras i en AppContainer inte hackas för att tillåta skadliga åtgärder utanför de begränsade tilldelade resurserna.

Tips/Råd

Uppackade appar kan också köras i en AppContainer. Men det är särskilt enkelt att använda AppContainer om du paketerar med MSIX. Så alla scenarier som beskrivs i det här avsnittet handlar om paketerade appar.

Konfigurera ett WinUI 3-projekt för AppContainer

Stegen i Skapa ett nytt projekt för en paketerad C#- eller C++ WinUI 3-skrivbordsapp visar standard och rekommenderat sätt att skapa ett nytt WinUI 3-projekt.

Som standard innehåller projektets Package.appxmanifest fil konfiguration för ett fullständigt förtroendepaket (dvs. medelintegritetsnivå). De relevanta avsnitten ser ut så här:

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

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

Om du vill konfigurera paketet som innehåller en AppContainer-app kan du redigera Attributet EntryPoint och ta bort deklarationen för begränsad kapacitet (men behålla elementet Funktioner ). Gillar det här:

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

<Capabilities/>
...

Om paketet installeras på Windows 10 version 2004 (10.0; Build 19041) och/eller senare, i stället för att ställa in EntryPoint kan du ange uap10:TrustLevel och uap10:RuntimeBehavior (efter att xml-namnrymdsprefixet deklarerats som det visas). Gillar det här:

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

Mer information finns i följande avsnitt:

Konfigurera en WinUI 3-lösning med två projekt för AppContainer

I föregående avsnitt beskrevs processen för MSIX med ett projekt. som vi rekommenderar och som är standard för nya WinUI 3-projekt. Mer information finns i Paketera din app genom att använda enkelprojekt-MSIX.

Men du kan ha ett WinUI 3-projekt som är från före introduktionen av MSIX-funktionen för ett projekt. I så fall har du två projekt i din lösning – ditt apparbete, plus ytterligare ett Windows-applikationspaketeringsprojekt. Om du kan migrera ditt projekt till ett enda projekt-MSIX är det idealiskt. Och du kommer att kunna följa vägledningen i föregående avsnitt. Mer information finns i Paketera din app genom att använda enkelprojekt-MSIX.

Om du inte kan migrera projektet till MSIX med ett projekt beskriver det här avsnittet hur du konfigurerar ditt paket som innehåller en AppContainer-app.

En Windows-applikationspaketeringsprojekt medför en standardinställning som ersätter konfigurationen i Package.appxmanifest. Projektet fungerar som om det fanns en TrustLevel-egenskap i projektfilen inställd på värdet Full.

För att åtgärda det underförstådda egenskapsvärdet expanderar du paketeringsprojektets Beroenden>Applikationer-nod och väljer den nod som representerar referensen till ditt WinUI 3-projekt. I fönstret Visual Studio Properties (inte projektegenskaper) väljer egenskapen Trust Level värdet Partial Trust.

Projektfilen för paketeringsprojektet innehåller nu den här explicita egenskapen:

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

Och nu kan du ta bort <rescap:Capability Name="runFullTrust" /> från paketeringsprojektets Package.appxmanifest fil.

Konfigurera en Windows application Project (C++ Win32 WndProc-type app) för AppContainer

Det här avsnittet är till för dig om du har en project av typen C++ Win32 WndProc som skapades med mallen Windows Application Project project. Det första steget i ett nötskal är att lägga till en C++ Windows Application Packaging Project i din lösning. Det finns mer information om de exakta stegen i Kom igång med din skrivbordsapplikation för MSIX-paketering i Visual Studio. Det avsnittet gäller för skrivbordsappar som skrivits i C++ eller C#.

Öppna sedan projektfilen för det nya paketeringsprojektet och lägg till en TrustLevel-egenskap i den befintliga ProjectReference-egenskapen så här:

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

När du skapar kan du se felet "fel APPX1673: Appmanifestet saknar det obligatoriska elementet "PhoneIdentity". Om det händer redigerar du projektets Package.appxmanifest fil så här:

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

Konfigurera ett WPF- eller WinForms-projekt för AppContainer

Det här avsnittet är till för dig om du har något av följande:

  • ett Windows Presentation Foundation (WPF) appprojekt som skapades med projektmallen C# WPF Application. Det ger dig ett .NET projekt, och det skiljer sig från projektmallen med namnet WPF App (.NET Framework). Eller
  • ett Windows Forms (WinForms) appprojekt som skapades med projektmallen C# Windows Forms App. Det ger dig ett .NET projekt, och det skiljer sig från projektmallen med namnet Windows Forms App (.NET Framework).

Det första steget i ett nötskal är att lägga till en C# Windows Application Packaging Project i din lösning. Det finns mer information om de exakta stegen i Ställ in ditt skrivbordsprogram för MSIX-packetering i Visual Studio.

Expandera sedan paketeringsprojektets Dependencies>Applications nod och välj den nod som representerar referensen till ditt WPF- eller WinForms-projekt. I fönstret Visual Studio Properties (inte projektegenskaper) väljer egenskapen Trust Level värdet Partial Trust.