Virtualización flexible
Información general
La característica de virtualización flexible proporciona una manera de que la aplicación declare que algún conjunto de sus archivos y entradas del Registro debe ser visible para otras aplicaciones y que deben conservarse al desinstalar la aplicación. El resto de archivos y entradas del Registro no son visibles para otras aplicaciones y se quitan al desinstalar.
Control de la virtualización de las ubicaciones seleccionadas
Nota:
El comportamiento descrito en esta sección se introdujo en Windows 10, versión 21H1.
A partir de Windows 10, versión 21H1, el sistema conserva el comportamiento existente de la funcionalidad restringida unvirtualizedResources y las propiedades RegistryWriteVirtualization y FilesystemWriteVirtualization. Además, el sistema agrega la capacidad de que la aplicación declare carpetas o claves del Registro específicas que desea que no se virtualicen.
- Solo puede declarar ubicaciones del sistema de archivos que se encuentran en
%USERPROFILE%\AppData
. - Solo puede declarar ubicaciones del Registro que se encuentran en HKCU.
Este es un ejemplo.
<!-- 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>
Nota:
Si la aplicación declara la sintaxis anterior a Windows 10 versión 21H1 y la de Windows 10 versión 21H1, la declaración anterior se usará en versiones anteriores a Windows 10 21H1, mientras que la nueva declaración se usará en versiones anteriores a Windows 10 21H1 y posteriores.
Mecanismos anteriores a Windows 10, versión 21H1
En entornos tradicionales, las aplicaciones pueden crear, actualizar y eliminar archivos en la mayoría de los lugares del sistema de archivos. También pueden crear, actualizar y eliminar entradas en el Registro de Windows. Esos archivos y entradas del Registro son visibles para otras aplicaciones del sistema, aunque a menudo no es necesario. Además, cuando se desinstala la aplicación, esos archivos y entradas del Registro a menudo se quedan atrás y quedan desordenados.
En la Plataforma universal de Windows (UWP), estos archivos y entradas del Registro se virtualizan para que solo la aplicación que los escribe pueda verlos. Y se quitan cuando se desinstala la aplicación. Pero hay escenarios válidos en los que la aplicación quiere que estos archivos y entradas del Registro sean visibles para otras aplicaciones. Además, otras aplicaciones pueden requerir que esos archivos y entradas se conserven incluso después de que se desinstale la aplicación que los escribió.
Comportamiento predeterminado de MSIX
Location | Context | Descripción |
---|---|---|
HKCU | Hora de instalación |
|
HKCU | Tiempo de ejecución |
|
HKLM | Hora de instalación |
|
HKLM | Tiempo de ejecución |
|
Carpetas conocidas | Hora de instalación |
|
AppData | Tiempo de ejecución |
|
La funcionalidad restringida unvirtualizedResources
Nota:
La compatibilidad con la funcionalidad restringida unvirtualizedResources
se introdujo en Windows 10, versión 1903 (10.0; compilación 18362), también conocida como Actualización de mayo de 2019 de Windows 10.
La aplicación puede declarar la funcionalidad restringida unvirtualizedResources
y definir las propiedades RegistryWriteVirtualization o FilesystemWriteVirtualization en true
para obtener acceso de escritura a HKCU o AppData. Esto es para habilitar el caso en el que la aplicación necesita escribir entradas que luego están visibles para otros procesos fuera de su paquete. Por ejemplo, los juegos escriben los datos guardados en AppData y esos datos deben conservarse incluso después de desinstalar el juego.
Propiedad | Descripción |
---|---|
RegistryWriteVirtualization=disabled | Las escrituras en HKCU van a la ubicación sin virtualizar, son visibles para otros procesos fuera del paquete y no se limpian al desinstalar la aplicación. |
FilesystemWriteVirtualization=disabled | Las escrituras en AppData van a la ubicación sin virtualizar, son visibles para otros procesos fuera del paquete y no se limpian al desinstalar la aplicación. |
Este mecanismo desactiva la virtualización de HKCU o AppData por completo, lo que va en contra del objetivo principal. No es una herramienta detallada y a menudo supera los requisitos de una aplicación determinada.