Applications MSIX AppContainer

La rubrique AppContainer pour les applications héritées couvre toutes les informations d’arrière-plan nécessaires sur l’environnement AppContainer et ses avantages ; cette rubrique contient également des exemples de code C# et C++ pour tester si un processus s’exécute à l’intérieur d’un AppContainer.

La rubrique que vous lisez actuellement montre comment vous pouvez prendre une application empaquetée à l’aide de MSIX, et la configurer facilement pour qu’elle s’exécute dans l’environnement AppContainer (dans un conteneur d’applications léger). Les applications UWP (plateforme Windows universelle) sont automatiquement des applications AppContainer. Toutefois, vous pouvez également configurer votre application de bureau empaquetée avec MSIX pour qu’elle soit une application AppContainer.

Le processus d’une application AppContainer et ses processus enfants s’exécutent à l’intérieur d’un conteneur d’application léger, où ils peuvent accéder uniquement aux ressources auxquelles l’accès leur est spécifiquement accordé. En outre, ils sont isolés par le biais de la virtualisation du système de fichiers et du Registre. Ainsi, les applications implémentées dans un environnement AppContainer ne peuvent pas être piratées pour autoriser des actions malveillantes au-delà des ressources affectées limitées.

Conseil

Les applications non packagées peuvent également être exécutées dans un AppContainer. Il est particulièrement facile d’utiliser AppContainer si vous créez un package à l’aide de MSIX. Ainsi, tous les scénarios décrits dans cette rubrique concernent les applications empaquetées.

Configurer un projet WinUI 3 pour AppContainer

Les étapes décrites dans Créer un projet pour une application de bureau WinUI 3 C# ou C++ empaquetée affichent la méthode par défaut et recommandée pour créer un projet WinUI 3.

Par défaut, le fichier du Package.appxmanifest projet contient la configuration d’un package d’approbation totale (autrement dit, niveau d’intégrité moyen). Les sections pertinentes ressemblent à ceci :

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

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

Pour configurer le package comme contenant une application AppContainer, vous pouvez modifier l’attribut EntryPoint et supprimer la déclaration de fonctionnalité restreinte (mais conserver l’élément Capabilities). Comme ceci :

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

<Capabilities/>
...

Si votre package s’installe sur Windows 10, version 2004 (10.0 ; Build 19041) et/ou version ultérieure, puis au lieu de définir EntryPoint, vous pouvez définir uap10 :TrustLevel et uap10 :RuntimeBehavior (après avoir déclaré le préfixe d’espace de noms XML, comme indiqué). Comme ceci :

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

Pour plus d’informations, consultez ces rubriques :

Configurer une solution à deux projets WinUI 3 pour AppContainer

La section précédente a décrit le processus pour MSIX à projet unique ; que nous recommandons, et qui est la valeur par défaut pour les nouveaux projets WinUI 3. Pour plus d’informations, consultez Empaqueter votre application à l’aide de MSIX à projet unique.

Toutefois, vous pouvez avoir un projet WinUI 3 qui date de l’introduction de la fonctionnalité MSIX à projet unique. Dans ce cas, vous aurez deux projets dans votre solution  : votre projet d’application, ainsi qu’un projet de création de packages d’applications Windows. Si vous pouvez migrer votre projet vers MSIX à projet unique, c’est idéal. Et vous serez en mesure de suivre les instructions de la section précédente. Pour plus d’informations, consultez Empaqueter votre application à l’aide de MSIX à projet unique.

Si vous ne pouvez pas migrer votre projet vers MSIX à projet unique, cette section explique comment configurer votre package comme contenant une application AppContainer.

Un projet de création de packages d’applications Window implique un paramètre par défaut qui remplace la configuration dans Package.appxmanifest. Le projet se comporte comme s’il y avait une propriété TrustLevel dans le fichier projet défini sur la valeur Full.

Pour remédier à cette valeur de propriété implicite, développez le nœud Applications de dépendances> du projet d’empaquetage, puis sélectionnez le nœud qui représente la référence à votre projet WinUI 3. Ensuite, dans la fenêtre Propriétés de Visual Studio (et non les propriétés du projet), pour la propriété Niveau de confiance, sélectionnez la valeur d’approbation partielle.

Le fichier projet du projet d’empaquetage contient maintenant cette propriété explicite :

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

Vous pouvez maintenant supprimer <rescap:Capability Name="runFullTrust" /> du fichier du projet d’empaquetage Package.appxmanifest.

Configurer un projet d’application Windows (application Win32 WndProc- type C++) pour AppContainer

Cette section est destinée à vous si vous disposez d’un projet de type WndProc C++ Win32 créé avec le modèle de projet d’application Windows. La première étape, en un mot, consiste à ajouter à votre solution un projet d’empaquetage d’applications Windows C++. Vous trouverez plus d’informations sur les étapes exactes décrites dans Configurer votre application de bureau pour l’empaquetage MSIX dans Visual Studio. Cette rubrique s’applique aux applications de bureau écrites en C++ ou C#.

Ouvrez ensuite le fichier projet de votre nouveau projet d’empaquetage et ajoutez une propriété TrustLevel à la propriété ProjectReference existante comme suit :

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

Lorsque vous générez, l’« erreur APPX1673 » : le manifeste de l’application est manquant pour l’élément « PhoneIdentity ». Si cela se produit, modifiez le fichier du projet Package.appxmanifest comme suit :

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

Configurer un projet WPF ou WinForms pour AppContainer

Cette section est destinée à vous si vous disposez des éléments suivants :

  • un projet d’application WPF (Windows Presentation Foundation) créé avec le modèle de projet d’application WPF C#. Cela vous donnera un projet .NET ; et il est différent du modèle de projet nommé WPF App (.NET Framework). ou
  • un projet d’application Windows Forms (WinForms) créé avec le modèle de projet d’application Windows Forms C#. Cela vous donnera un projet .NET ; et il est différent du modèle de projet nommé Application Windows Forms (.NET Framework).

La première étape, en un mot, consiste à ajouter à votre solution un projet d’empaquetage d’applications Windows C#. Vous trouverez plus d’informations sur les étapes exactes décrites dans Configurer votre application de bureau pour l’empaquetage MSIX dans Visual Studio.

Développez ensuite le nœud Applications de dépendances>du projet d’empaquetage, puis sélectionnez le nœud qui représente la référence à votre projet WPF ou WinForms. Ensuite, dans la fenêtre Propriétés de Visual Studio (et non les propriétés du projet), pour la propriété Niveau de confiance, sélectionnez la valeur d’approbation partielle.