Cómo se ejecutan las aplicaciones de escritorio empaquetadas en Windows

Operación Resultado Ejemplo
Lectura o enumeración de un archivo o una carpeta de Windows conocidos Una combinación dinámica de C:\Archivos de programa\nombre_paquete\VFS\carpeta_conocida con el equivalente del sistema local. La lectura de C:\Windows\System32 devuelve el contenido de C:\Windows\System32, además del contenido de C:\Archivos de programa\WindowsApps\nombre_paquete\VFS\SystemX86.
Escritura en AppData Windows 10, versión 1903 y posteriores: los nuevos archivos y carpetas creados en los siguientes directorios se redirigen a una ubicación privada por usuario y por paquete:
  • Local
  • Local\Microsoft
  • Movilidad
  • Roaming\Microsoft
  • Roaming\Microsoft\Windows\Start Menu\Programs
En respuesta a un comando de apertura de archivo, el sistema operativo abrirá primero el archivo de la ubicación por usuario y por paquete. Si no existe esta ubicación, el sistema operativo intentará abrir el archivo desde la ubicación real de AppData. Si el archivo se abre desde la ubicación real de AppData, no se producirá ninguna virtualización para ese archivo. Se permite la eliminación de archivos en AppData si el usuario cuenta con los permisos necesarios.

Windows 10, versión 1809 y versiones anteriores: copia por escrito para una ubicación por usuario y por aplicación.

Normalmente, AppData es C:\Usuarios\nombre_usuario\AppData.
Escritura dentro el paquete No permitido. El paquete es de sólo lectura. No se permiten las escrituras en C:\Archivos de programa\WindowsApps\nombre_paquete.
Escrituras fuera del paquete Se permiten si el usuario tiene permisos. Una operación de escritura en C:\Windows\System32\foo.dll se permite si el paquete no contiene C:\Archivos de programa\WindowsApps\nombre_paquete\VFS\SystemX86\foo.dll y el usuario tiene permisos.

Ubicaciones de VFS empaquetadas

En la tabla siguiente se muestra en qué ubicación del sistema se superponen los archivos que se envían como parte del paquete para la aplicación. La aplicación considerará que estos archivos están en las ubicaciones del sistema que figuran en la lista, pero, en realidad, se encuentran en las ubicaciones redirigidas dentro de C:\Archivos de programa\WindowsApps\nombre_paquete\VFS. Las ubicaciones de FOLDERID proceden de las constantes KNOWNFOLDERID.

Ubicación del sistema Ubicación redirigida (en [RutaDelPaquete]\VFS) Válido en las arquitecturas
FOLDERID_SystemX86 SystemX86 x86, amd64
FOLDERID_System SystemX64 AMD64
FOLDERID_ProgramFilesX86 ProgramFilesX86 x86, amd6
FOLDERID_ProgramFilesX64 ProgramFilesX64 AMD64
FOLDERID_ProgramFilesCommonX86 ProgramFilesCommonX86 x86, amd64
FOLDERID_ProgramFilesCommonX64 ProgramFilesCommonX64 AMD64
FOLDERID_Windows Windows x86, amd64
FOLDERID_ProgramData AppData comunes x86, amd64
FOLDERID_System\catroot AppVSystem32Catroot x86, amd64
FOLDERID_System\catroot2 AppVSystem32Catroot2 x86, amd64
FOLDERID_System\drivers\etc AppVSystem32DriversEtc x86, amd64
FOLDERID_System\driverstore AppVSystem32Driverstore x86, amd64
FOLDERID_System\logfiles AppVSystem32Logfiles x86, amd64
FOLDERID_System\spool AppVSystem32Spool x86, amd64

Registro

Los paquetes de aplicaciones contienen un archivo registry.dat, que actúa como el equivalente lógico de HKLM\Software en el registro real. En tiempo de ejecución, este Registro virtual combina el contenido de este subárbol en el subárbol del sistema nativo para proporcionar una vista especial de ambos. Por ejemplo, si registry.dat contiene una sola clave "Foo", entonces una operación de lectura de HKLM\Software en tiempo de ejecución también mostrará que contiene "Foo" (además de todas las claves del sistema nativo).

Aunque los paquetes de MSIX incluyen claves HKLM y HKCU, se tratan de forma diferente. Solo las claves que se encuentran en HKLM\Software forman parte del paquete, no las claves que se encuentran en HKCU o en otros lugares del Registro. No se permiten las escrituras en las claves o los valores del paquete. Las escrituras en las claves o los valores que no forman parte del paquete se permiten si el usuario tiene permisos.

Todas las escrituras en HKCU se copian en escritura a una ubicación privada por usuario y por aplicación. Tradicionalmente, los desinstaladores no pueden limpiar HKEY_CURRENT_USER porque los datos del Registro de los usuarios que cerraron sesión se desmontan y no están disponibles.

Todas las escrituras se conservan durante la actualización del paquete y únicamente se eliminan cuando la aplicación se quita por completo.

Operaciones comunes

En la siguiente tabla de referencia breve se muestran las operaciones del registro y cómo las controla el sistema operativo.

Operación Resultado Ejemplo
Lectura o enumeración de HKLM\Software Una combinación dinámica del subárbol del paquete con el equivalente del sistema local. Si registry.dat contiene una sola clave "Foo", en tiempo de ejecución una operación de lectura de HKLM\Software mostrará el contenido de HKLM\Software, además de HKLM\Software\Foo.
Escrituras en HKCU Copia en escritura a una ubicación privada por usuario, por aplicación. Lo mismo que AppData para archivos.
Escrituras dentro el paquete. No permitido. El paquete es de sólo lectura. No se permiten las escrituras en HKLM\Software si existe una clave o un valor correspondiente en el subárbol del paquete.
Escrituras fuera del paquete Ignoradas por el sistema operativo. Se permiten si el usuario tiene permisos. Las escrituras en HKLM\Software se permiten si no existe una clave y un valor correspondiente en el subárbol del paquete y si el usuario tiene los permisos de acceso adecuados.

Desinstalación

Cuando el usuario desinstala un paquete, se quitan todos los archivos y las carpetas ubicados en C:\Archivos de programa\WindowsApps\nombre_paquete, así como las escrituras redirigidas a AppData o al registro que se capturaron durante el proceso de empaquetado.

En este artículo se proporciona un análisis más detallado sobre lo que sucede con los archivos y entradas del registro cuando se crea un paquete de aplicación de Windows para una aplicación de escritorio.

Un objetivo clave de los paquetes modernos es separar el estado de la aplicación del estado del sistema tanto como sea posible, a la vez que se mantiene la compatibilidad con otras aplicaciones. Para ello, Windows 10 coloca la aplicación dentro de un paquete MSIX y, posteriormente, detecta y redirige algunos cambios que realiza en el sistema de archivos y en el registro en tiempo de ejecución.

Los paquetes que creas para tu aplicación de escritorio son solo de escritorio y las aplicaciones de plena confianza no se virtualizan ni están en un espacio aislado. Esto les permite interactuar con otras aplicaciones de la misma forma que las aplicaciones de escritorio clásicas.

Instalación

Los paquetes de aplicaciones se instalan en C:\Archivos de programa\WindowsApps\nombre_paquete, con el archivo ejecutable denominado nombre_aplicación.exe. Cada carpeta de paquete contiene un manifiesto (denominado AppxManifest.xml) que incluye un espacio de nombres XML especial para las aplicaciones empaquetadas. En ese archivo de manifiesto hay un elemento <EntryPoint> que hace referencia a una aplicación de plena confianza. Cuando se inicia la aplicación, no se ejecuta dentro de un contenedor de la aplicación, sino que, en su lugar, se ejecuta como el usuario con normalidad.

Después de la implementación, el sistema operativo marca los archivos del paquete como de solo lectura y los bloquea completamente. Windows evita que las aplicaciones se inicien en caso de que se manipulen estos archivos.

Sistema de archivos

El sistema operativo admite distintos niveles de operaciones del sistema de archivos para las aplicaciones de escritorio empaquetadas, en función de la ubicación de la carpeta.

Optimizado para el dispositivo

Con el fin de evitar la duplicación de archivos para optimizar el espacio de almacenamiento en disco y reducir el ancho de banda necesario al descargar archivos, el sistema operativo saca provecho del almacenamiento único y la vinculación física de archivos. Cuando un usuario descarga un paquete MSIX, el archivo AppxManifest.xml se usa para determinar si los datos que contiene dicho paquete ya existen en el disco de una instalación de paquete anterior. Si el mismo archivo existe en varios paquetes MSIX, el sistema operativo almacena el archivo compartido en el disco una sola vez y crea vínculos físicos desde ambos paquetes al archivo compartido. Dado que los archivos se descargan en bloques de 64 KB, aunque en el disco exista un porcentaje de un archivo que se está descargando, solo se descarga el incremento diferente. De este modo, se reduce el ancho de banda usado para la descarga.

Operaciones de AppData en Windows 10, versión 1903 y versiones posteriores

Todos los archivos y carpetas recién creados en la carpeta AppData del usuario (por ejemplo, C:\Users\nombre_usuario\AppData) se escriben en una ubicación privada por usuario y por aplicación, pero se combinan en tiempo de ejecución para aparecer en la ubicación real de AppData. Esto permite cierto grado de separación de estados para los artefactos que solo usa la propia aplicación y, a su vez, esto permite que el sistema limpie esos archivos cuando se desinstala la aplicación. Las modificaciones en los archivos existentes en la carpeta AppData del usuario pueden proporcionar un mayor grado de compatibilidad e interactividad entre las aplicaciones y el sistema operativo. Esto reduce el "deterioro" del sistema de archivos porque el sistema operativo es consciente de cada cambio de archivo o directorio realizado por una aplicación. La separación de estados también permite que las aplicaciones de escritorio empaquetadas reanuden la actividad en la que se quedó la versión no empaquetada de la misma aplicación. Ten en cuenta que el sistema operativo no es compatible con una carpeta del sistema de archivos virtual (VFS) de la carpeta AppData del usuario.

Operaciones de AppData en Windows 10, versión 1809 y versiones posteriores

Todo lo que se escribe en la carpeta AppData del usuario (por ejemplo, C:\Usuarios\nombre_usuario\AppData), como las operaciones de creación, eliminación y actualización, se copia al escribir a una ubicación privada por usuario y por aplicación. Esto crea la ilusión de que la aplicación empaquetada está editando el elemento AppData real, pero, en realidad, está modificando una copia privada. Al redireccionar las escrituras de este modo, el sistema puede realizar un seguimiento de todas las modificaciones de archivos que realiza la aplicación. Esto permite que el sistema limpie esos archivos cuando se desinstala la aplicación; por lo tanto, se reduce el "deterioro" del sistema y se ofrece una mejor experiencia de eliminación para el usuario.

Otras carpetas

Además de redirigir AppData, las carpetas conocidas de Windows (System32, Archivos de programa (x86), etcétera) se combinan dinámicamente con los directorios correspondientes del paquete de la aplicación. Cada paquete contiene una carpeta denominada "VFS" en su raíz. Las lecturas de directorios o archivos en el directorio VFS se combinan en tiempo de ejecución con sus respectivos equivalentes nativos. Por ejemplo, una aplicación podría contener C:\Archivos de programa\WindowsApps\nombre_paquete\VFS\SystemX86\vc10.dll como parte de su paquete de aplicación, pero el archivo aparecería como instalado en C:\Windows\System32\vc10.dll. Esto mantiene la compatibilidad con las aplicaciones de escritorio que pudieran esperar que los archivos se encuentren en ubicaciones distintas del paquete.

No se permiten las escrituras en archivos o carpetas del paquete de la aplicación. El sistema operativo ignora las escrituras en archivos y carpetas que no forman parte del paquete, y se permiten si el usuario tiene permisos.

Operaciones comunes

En la siguiente tabla de referencia breve se muestran las operaciones comunes del sistema de archivos y cómo las controla el sistema operativo.