Compartir a través de


Virtualización flexible

Información general

La característica de virtualización flexible proporciona una manera de que la aplicación declare que algunos conjuntos de sus archivos y entradas del Registro deben ser visibles para otras aplicaciones; y que deben conservarse en la desinstalación de la aplicación. Todos los demás archivos y entradas del Registro no son visibles para otras aplicaciones; y se quitan al desinstalar.

Cómo controlar la virtualización de 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 posibilidad de que la aplicación declare carpetas específicas o claves del Registro que desea no virtualizar.

  • Solo puede declarar ubicaciones del sistema de archivos que están dentro de %USERPROFILE%\AppData.
  • Solo puede declarar ubicaciones del Registro que están dentro de 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 Windows 10, versión 21H1, la declaración anterior se usará en versiones anteriores a Windows 10, versión 21H1, mientras que la nueva declaración se usará en versiones anteriores a Windows 10, versión 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. Y 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 dejan atrás y se vuelven desordenados.

En la Plataforma universal de Windows (UWP), estos archivos y entradas del Registro se virtualizan para que solo la aplicación que los escriba pueda verlos. Y se quitan cuando se desinstala la aplicación. Pero hay escenarios válidos en los que la aplicación quiere que dichos archivos y entradas del Registro sean visibles para otras aplicaciones. Además, es posible que otras aplicaciones requieran que esos archivos y entradas persistan incluso después de desinstalar la aplicación que los escribió.

Comportamiento predeterminado de MSIX

Ubicación Contexto Descripción
HKCU Tiempo de instalación
  • La aplicación puede incluir un archivo user.dat que especifica entradas HKCU\Software. Estas entradas se escriben realmente en un user.dat archivo de la carpeta AppData del usuario (en una subcarpeta para cada aplicación) y se presentan a la aplicación como si las claves estuvieran en HKCU.
  • Para la lectura, este subárbol privado se combina con la entrada HKCU\Software no virtualizada para que todas las entradas parezcan estar en el mismo lugar.
  • Cuando se desinstala la aplicación, las entradas virtualizadas ya no están disponibles, ya que nunca se agregaron realmente al registro.
  • Las claves de la colmena virtualizada solo son visibles para la app.
HKCU Tiempo de ejecución
  • Las escrituras van a un subárbol privado independiente por aplicación y por usuario.
  • Para la lectura, este subárbol se combina con la entrada HKCU no virtualizada para que todas las entradas parezcan estar en el mismo lugar.
  • Cuando se desinstala la aplicación, se quitan las entradas virtualizadas.
  • Las claves en el clúster virtualizado solo son visibles en la aplicación.
HKLM Tiempo de instalación
  • La aplicación puede incluir un registry.dat archivo que especifique las entradas de HKLM\Software. Estas entradas se escriben realmente en un user.dat archivo de la carpeta AppData del usuario (en una subcarpeta para cada aplicación) y se presentan a la aplicación como si las claves estuvieran en HKLM.
  • Para la lectura, este subárbol privado se combina con la entrada HKLM\Software no virtualizada para que todas las entradas parezcan estar en el mismo lugar.
  • Cuando se desinstala la aplicación, las entradas virtualizadas ya no están disponibles, ya que nunca se agregaron realmente al registro.
  • Las claves del subárbol virtualizado solo son visibles para la aplicación.
HKLM Tiempo de ejecución
  • Las escrituras en HKLM se permiten siempre que no exista una clave o un valor correspondientes en el subárbol del paquete y el usuario tenga los permisos de acceso correctos (lo que significa que esto solo está disponible para una aplicación de Centennial que se ejecute con privilegios elevados).
Carpetas conocidas Tiempo de instalación
  • La aplicación puede incluir una carpeta VFS con subcarpetas con nombre conocidas que contienen archivos arbitrarios.
  • Para la lectura, estas subcarpetas se combinan con las ubicaciones conocidas no virtualizadas, de modo que todos los archivos parecen estar en el mismo lugar.
AppData Tiempo de ejecución
  • En el caso de las versiones de Windows menores o iguales que 1809, todas las escrituras en la carpeta AppData del usuario (incluida la creación, eliminación y actualización) se copian en escritura en una ubicación privada por usuario y por aplicación, que se combina en tiempo de ejecución para que aparezca en la ubicación real de AppData .
  • Para las versiones de Windows superiores a 1809, todos los archivos y carpetas recién creados de la carpeta AppData del usuario se escriben en una ubicación privada por usuario y por aplicación que se combina en tiempo de ejecución para que aparezca en la ubicación real de AppData . Las modificaciones en los archivos AppData existentes se realizan en los archivos no virtualizados. En el caso de las lecturas, el sistema intenta primero la ubicación privada y, a continuación, usa la opción de reserva de AppData sin virtualizar.
  • En la reserva, se permite la escritura en los archivos no virtualizados.
  • Cuando se desinstala la aplicación, se quitan las entradas virtualizadas.
  • Los archivos de la ubicación virtualizada solo son visibles para la aplicación.
  • No hay compatibilidad con VFS para AppData.
  • Aparte de AppData, la aplicación puede escribir en cualquier ubicación donde el usuario tenga acceso de escritura, incluidas otras partes de %userprofile% (de las cuales AppData es solo una parte).

La funcionalidad restringida unvirtualizedResources

Nota:

La compatibilidad con la unvirtualizedResources funcionalidad restringida 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 unvirtualizedResources funcionalidad restringida y establecer las propiedades RegistryWriteVirtualization y/o FilesystemWriteVirtualization en true, para obtener acceso de escritura a HKCU y/o a AppData. Esto es para habilitar el caso en el que la aplicación necesita escribir entradas que luego son visibles para otros procesos fuera de su paquete. Por ejemplo, los juegos escriben 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 no virtualizada, son visibles para otros procesos fuera del paquete y no se limpian en la desinstalación de la aplicación.
FilesystemWriteVirtualization=disabled Las escrituras en AppData van a la ubicación no virtualizada, son visibles para otros procesos fuera del paquete y no se limpian en la desinstalación de la aplicación.

Este mecanismo desactiva la virtualización HKCU o AppData por completo, que va en contra del objetivo principal. No es una herramienta específica y a menudo supera los requisitos de una aplicación determinada.