Virtualisation flexible
Vue d’ensemble
La fonctionnalité de virtualisation flexible permet à votre application de déclarer qu’un certain ensemble de ses fichiers et entrées de Registre doivent être visibles par d’autres applications, et que ceux-ci doivent persister lors de la désinstallation de l’application. Tous les autres fichiers et entrées de Registre ne sont pas visibles par les 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 est apparu pour la première fois dans Windows 10 version 21H1.
Dans Windows 10 version 21H1 et les versions suivantes, le système conserve le comportement existant de la fonctionnalité limitée 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 que vous souhaitez non virtualisés.
- Vous pouvez déclarer uniquement les emplacements de système de fichiers qui se trouvent dans
%USERPROFILE%\AppData
. - Vous pouvez uniquement déclarer les emplacements de Registre qui se trouvent dans HKCU.
Prenons 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 antérieure à celle de Windows 10 version 21H1 et la syntaxe ultérieure à cette version, l’ancienne déclaration sera utilisée sur les versions antérieures, et la nouvelle déclaration sera utilisée à la fois sur les versions antérieures et ultérieures.
Mécanismes existant avant Windows 10 version 21H1
Dans les environnements traditionnels, les applications peuvent créer, mettre à jour et supprimer des fichiers dans le système de fichiers. En outre, elles 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 du système, même s’ils n’ont pas besoin de l’être. En outre, lorsque l’application est désinstallée, ces fichiers et entrées de Registre sont souvent oubliés et encombrent l’ordinateur.
Dans la plateforme Windows universelle (UWP), de tels fichiers et entrées de Registre sont virtualisés afin que seule l’application qui les écrit puisse les voir. Ensuite, ils sont supprimés lors de la désinstallation de l’application. Toutefois, il existe des scénarios valides dans lesquels l’application nécessite que ces fichiers et entrées de Registre soient visibles par d’autres applications. En outre, d’autres applications peuvent nécessiter la conservation de ces fichiers et entrées, même après la désinstallation de l’application qui les a écrits.
Comportement MSIX par défaut
Emplacement | Context | Description |
---|---|---|
HKCU | Au moment de l’installation |
|
HKCU | Exécution |
|
HKLM | Au moment de l’installation |
|
HKLM | Exécution |
|
Dossiers connus | Au moment de l’installation |
|
AppData | Exécution |
|
La fonctionnalité limitée unvirtualizedResources
Remarque
La prise en charge de la fonctionnalité limitée unvirtualizedResources
est apparue pour la première fois dans Windows 10 version 1903 (10.0; build 18362), qui est également connu sous le nom de « Mise à jour de mai 2019 de Windows 10 ».
Votre application peut déclarer la fonctionnalité limitée unvirtualizedResources
et définir les propriétés RegistryWriteVirtualization et/ou FilesystemWriteVirtualization sur true
, afin d’accéder en écriture à HKCU et/ou à AppData. Cela permet à votre application d’é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 dans AppData, et ces données doivent être conservées même après la désinstallation du jeu.
Propriété | Description |
---|---|
RegistryWriteVirtualization=disabled | Les écritures dans HKCU sont effectuées dans l’emplacement non virtualisé. Elles sont visibles par les autres processus en dehors du package et ne sont pas nettoyées lors de la désinstallation de l’application. |
FilesystemWriteVirtualization=disabled | Les écritures dans AppData sont effectuées dans l’emplacement non virtualisé. Elles sont visibles par les 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 entièrement la virtualisation HKCU et/ou AppData, ce qui va à l’encontre de l’objectif principal. Cet outil n’est pas précis et dépasse souvent les exigences d’une application donnée.