Partager via


Virtualisation flexible

Aperçu

La fonctionnalité de virtualisation flexible permet à votre application de déclarer que certains ensembles de ses fichiers et entrées de Registre doivent être visibles par d’autres applications ; et que ceux-ci doivent être conservés lors de la désinstallation de l’application. Tous les autres fichiers et entrées de Registre ne sont pas visibles par d’autres applications ; et sont supprimés lors de la désinstallation.

Comment contrôler la virtualisation des emplacements sélectionnés

Remarque

Le comportement décrit dans cette section a été introduit dans Windows 10, version 21H1.

À partir de Windows 10, version 21H1, le système conserve le comportement existant de la fonctionnalité restreinte unvirtualizedResources , ainsi que les propriétés RegistryWriteVirtualization et FilesystemWriteVirtualization . En outre, le système ajoute la possibilité pour votre application de déclarer des dossiers et/ou des clés de Registre spécifiques que vous souhaitez annuler.

  • Vous pouvez déclarer uniquement les emplacements du système de fichiers qui se trouvent dans %USERPROFILE%\AppData.
  • Vous pouvez déclarer uniquement les emplacements du Registre qui se trouvent dans HKCU.

Voici un exemple.

<!-- Declare the desktop6 and/or virtualization XML namespace where the virtualization properties are defined, and include this in the list of ignorable namespaces. -->
<!-- Declare the XML namespace for the required restricted capability, and include it in the list of ignorable namespaces. -->
<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:desktop6="http://schemas.microsoft.com/appx/manifest/desktop/windows10/6"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  xmlns:virtualization="http://schemas.microsoft.com/appx/manifest/virtualization/windows10"
  IgnorableNamespaces="rescap desktop6 virtualization">

  <!-- ... -->
  <!-- Other entries omitted for brevity. -->
  <!-- ... -->

  <Properties>
    <!-- If you don't want virtualization of registry writes to HKEY_CURRENT_USER, then include the property, and set it to disabled. -->
    <desktop6:RegistryWriteVirtualization>disabled</desktop6:RegistryWriteVirtualization>

    <!-- If you don't want virtualization of file system writes to the user's AppData folder, then include the property, and set it to disabled. -->
    <desktop6:FileSystemWriteVirtualization>disabled</desktop6:FileSystemWriteVirtualization>
    
    <!-- On Windows 10, version 21H1 and later OS versions, you can declare specific file system and/or registry locations that you want to be unvirtualized. 
    If these are recognized on the current device, then they take precedence over the old declarations. On older devices,
    the new declarations are ignored and the old ones are honored. -->
    <virtualization:FileSystemWriteVirtualization>
      <virtualization:ExcludedDirectories>
        <virtualization:ExcludedDirectory>$(KnownFolder:LocalAppData)\Fabrikam\Widgets</virtualization:ExcludedDirectory>
        <virtualization:ExcludedDirectory>$(KnownFolder:RoamingAppData)\Fabrikam\Widgets</virtualization:ExcludedDirectory>
      </virtualization:ExcludedDirectories>
    </virtualization:FileSystemWriteVirtualization>

    <virtualization:RegistryWriteVirtualization>
      <virtualization:ExcludedKeys>
        <virtualization:ExcludedKey>HKEY_CURRENT_USER\Software\Fabrikam\Widgets</virtualization:ExcludedKey>
      </virtualization:ExcludedKeys>
    </virtualization:RegistryWriteVirtualization>
  </Properties>

  <Capabilities>
    <!-- Include the required restricted capability. -->
    <rescap:Capability Name="unvirtualizedResources"/>
  </Capabilities>
</Package>

Remarque

Si votre application déclare à la fois la syntaxe pré-Windows 10, version 21H1 et Windows 10, version 21H1, l’ancienne déclaration sera utilisée sur les versions antérieures à Windows 10, version 21H1, tandis que la nouvelle déclaration sera utilisée sur les versions antérieures à Windows 10, version 21H1 et ultérieures.

Mécanismes antérieurs à Windows 10, version 21H1

Dans les environnements traditionnels, les applications peuvent créer, mettre à jour et supprimer des fichiers dans la plupart des endroits du système de fichiers. Et ils peuvent créer, mettre à jour et supprimer des entrées dans le Registre Windows. Ces fichiers et entrées de Registre sont visibles par d’autres applications sur le système, même si elles n’ont souvent pas besoin d’être. En outre, lorsque l'application est désinstallée, ces fichiers et entrées de registre restent souvent et entraînent des encombrements.

Dans la plateforme Windows universelle (UWP), ces fichiers et entrées de Registre sont virtualisés afin que seule l’application qui les écrit puisse les voir. Et ils sont supprimés lorsque l’application est désinstallée. Toutefois, il existe des scénarios valides dans lesquels l’application souhaite que ces fichiers et entrées de Registre soient visibles par d’autres applications. En outre, d’autres applications peuvent exiger que ces fichiers et entrées persistent même après la désinstallation de l’application qui les a écrites.

Comportement MSIX par défaut

Emplacement Contexte Descriptif
HKCU Heure d’installation
  • L’application peut inclure un user.dat fichier qui spécifie des entrées HKCU\Software . Ces entrées sont réellement écrites dans un user.dat fichier dans le dossier AppData de l’utilisateur (dans un sous-dossier pour chaque application) et présentées à l’application comme si les clés étaient dans HKCU.
  • Pour la lecture, cette ruche privée est fusionnée avec le logiciel HKCU\ non virtuel afin que toutes les entrées apparaissent au même endroit.
  • Lorsque l’application est désinstallée, les entrées virtualisées ne sont plus disponibles, car elles n’ont jamais été réellement ajoutées au Registre.
  • Les clés de la ruche virtualisée sont visibles uniquement pour l’application.
HKCU Temps d'exécution
  • Les écritures sont placées dans une ruche privée pour chaque application et chaque utilisateur.
  • Pour la lecture, cette ruche est fusionnée avec le HKCU non virtualisé afin que toutes les entrées s’affichent au même endroit.
  • Lorsque l’application est désinstallée, les entrées virtualisées sont supprimées.
  • Les clés de la ruche virtualisée ne sont visibles que par l’application.
HKLM Heure d’installation
  • L’application peut inclure un registry.dat fichier qui spécifie des entrées HKLM\Software . Ces entrées sont réellement écrites dans un user.dat fichier dans le dossier AppData de l’utilisateur (dans un sous-dossier pour chaque application) et présentées à l’application comme si les clés étaient dans HKLM.
  • Pour la lecture, cette ruche privée est fusionnée avec le HKLM\Software non virtualisé afin que toutes les entrées s’affichent au même endroit.
  • Lorsque l’application est désinstallée, les entrées virtualisées ne sont plus disponibles, car elles n’ont jamais été réellement ajoutées au Registre.
  • Les clés de la ruche virtualisée sont visibles uniquement pour l’application.
HKLM Temps d'exécution
  • Les écritures sous HKLM sont autorisées tant qu’il n’existe pas une paire clé/valeur correspondante dans la ruche du package et que l’utilisateur dispose des autorisations d’accès appropriées (autrement dit, ceci n’est disponible que pour une application Centennial exécutée avec des privilèges élevés).
Dossiers connus Heure d’installation
  • L’application peut inclure un dossier VFS avec des sous-dossiers nommés connus qui contiennent des fichiers arbitraires.
  • Pour la lecture, ces sous-dossiers sont fusionnés avec les emplacements connus non virtuels, afin que tous les fichiers apparaissent au même endroit.
AppData Temps d'exécution
  • Pour les versions Windows inférieures ou égales à 1809, toutes les écritures dans le dossier AppData de l’utilisateur (y compris la création, la suppression et la mise à jour) sont copiées en écriture dans un emplacement privé par utilisateur, par application, qui est fusionné au moment de l’exécution pour apparaître dans l’emplacement AppData réel.
  • Pour les versions Windows supérieures à 1809, tous les fichiers et dossiers nouvellement créés dans le dossier AppData de l’utilisateur sont écrits dans un emplacement privé par utilisateur, par application fusionné au moment de l’exécution pour apparaître dans l’emplacement AppData réel. Les modifications apportées aux fichiers AppData existants sont effectuées sur les fichiers non virtuels. Pour les lectures, le système tente d’abord l’emplacement privé, puis revient à l’AppData non virtuel.
  • En cas de basculement, les écritures sur les fichiers non virtualisés sont autorisées.
  • Lorsque l’application est désinstallée, les entrées virtualisées sont supprimées.
  • Les fichiers dans l’emplacement virtualisé ne sont visibles que par l’application.
  • Il n’existe aucune prise en charge de VFS pour AppData.
  • Outre AppData, l’application peut écrire à n’importe quel emplacement où l’utilisateur dispose d’un accès en écriture, y compris d’autres parties de %userprofile% (dont AppData n’est qu’une seule partie).

La fonctionnalité limitée unvirtualizedResources

Remarque

La prise en charge de la unvirtualizedResources fonctionnalité restreinte a été introduite dans Windows 10, version 1903 (10.0 ; Build 18362), également appelée Mise à jour de Mai 2019 de Windows 10.

Votre application peut déclarer la unvirtualizedResources capacité restreinte et définir les propriétés RegistryWriteVirtualization et/ou FilesystemWriteVirtualization sur true, afin d'obtenir l'accès en écriture à HKCU et/ou à AppData. Cela permet d’activer le cas où votre application doit écrire des entrées qui sont ensuite visibles par d’autres processus en dehors de son package. Par exemple, les jeux écrivent des données d’enregistrement dans AppData et ces données doivent être conservées même après la désinstallation du jeu.

Propriété Descriptif
RegistryWriteVirtualization=désactivé Les écritures dans HKCU vont à l’emplacement non virtuel, sont visibles par d’autres processus en dehors du package et ne sont pas nettoyées lors de la désinstallation de l’application.
FilesystemWriteVirtualization=désactivé Les écritures dans AppData vont à l’emplacement non virtuel, sont visibles par d’autres processus en dehors du package et ne sont pas nettoyées lors de la désinstallation de l’application.

Ce mécanisme désactive complètement la virtualisation HKCU et/ou AppData , ce qui va à l’encontre de l’objectif principal. Il ne s’agit pas d’un outil affiné, et il dépasse souvent les exigences d’une application donnée.