Actualizaciones de paquetes de aplicaciones
La actualización de los paquetes de aplicaciones de Windows modernas está optimizada para garantizar que solo se descargan los bits cambiados esenciales de la aplicación para actualizar una aplicación de Windows existente.
En un nivel alto, durante la creación del paquete se crea y almacena un fragmento de metadatos en el archivo del paquete de la aplicación (.appx o .msix), lo que permite que Windows identifique de forma única las partes del paquete. Al actualizar un paquete de la aplicación, Windows utiliza el archivo de metadatos para comparar el paquete antiguo con el nuevo y determinar qué se debe descargar en el dispositivo.
Dado que los metadatos permiten identificar de forma única las partes del paquete, esto significa que la maquinaria de actualización diferencial funciona plenamente desde cualquier versión de un paquete a cualquier otra (siempre que el paquete de origen tenga una versión inferior a la del paquete de destino).
Los metadatos se encuentran en el archivo AppxBlockMap.xml (los metadatos mencionados anteriormente). El archivo AppxBlockMap.xml es un archivo XML que contiene una lista bidimensional de información sobre los archivos del paquete. La primera dimensión presenta detalles de alto nivel en el archivo (por ejemplo, el nombre y el tamaño) y la segunda dimensión proporciona representaciones hash SHA2-256 de cada porción de 64 KB de ese archivo (el "bloque").
Aquí hay un ejemplo de un archivo AppxBlockMap.xml.
<!--?xml version="1.0" encoding="UTF-8"?-->
<blockmap hashmethod="http://www.w3.org/2001/04/xmlenc#sha256"
xmlns="http://schemas.microsoft.com/appx/2010/blockmap">
<file lfhsize="66" size="101188" name="asset1.jpg">
<block hash="2bidNE0JyaO+FjaTpRe0g8HzUCblUf/cfBcTXiZR74c="/>
<block hash="+jeFwKrGk5gw9wSICWsWRtEQXwcLC7af4EWS7DgrAkY="/>
</file>
<file lfhsize="61" size="108823" name="asset2.jpg">
<block hash="u0+5S0GOzwyAfYx54tKycZyHRBYm2ybvq27dkIKqDsQ="/>
<block hash="F9h0FRMetL6BNCszAYB0bgyx2KWN+dO1bls4Q9m267c="/>
</file>
...
</blockmap>
El primer archivo (asset1.jpg) tiene dos valores hash de bloque. El primer hash representa el primer bloque de 64 KB del archivo y el segundo hash representa los 35 KB restantes, dado que el archivo tiene 101 188 bytes.
Durante una actualización, si se modifica el segundo bloque de ese archivo, el hash también se actualiza para reflejarlo. El componente de descarga extrae el segundo bloque y reutiliza el primer bloque no modificado del paquete antiguo.
A mayor escala, si un archivo entero no cambia (determinado por un conjunto completo de bloques que no cambian), ese archivo se puede reutilizar desde el paquete existente, lo que ahorra tiempo y recursos.
El nombre de la familia de paquetes está formado por el nombre del paquete y el publicador. Para poder realizar la actualización, los metadatos del nuevo paquete deben ser los mismos que los del paquete instalado anteriormente. A continuación, se muestra un ejemplo de un nombre de familia de paquetes: Contoso.ContosoApp_8wekyb3d8bbwe
.
En general, las actualizaciones de la aplicación requieren que la versión del nuevo paquete sea superior a la actual. El proceso de actualización de la aplicación no permitirá que los paquetes con versiones inferiores se instalen de forma predeterminada. A partir de la versión 1809 de Windows 10, puedes usar ForceUpdateToAnyVersion para permitir los paquetes de versiones inferiores cuando se proporciona un modificador de invalidación como parte de los argumentos de la actualización. Actualmente, está disponible en PowerShell mediante la opción ForceUpdateFromAnyVersion, a través de la API PackageManager, el CSP EnterpriseModernAppManagement y el archivo AppInstaller.
Nota
Si usa ForceUpdateToAnyVersion en una aplicación de Microsoft Store, Windows Update actualizará automáticamente a la versión aplicable más reciente.
El paquete de actualización del paquete de la aplicación instalado actualmente puede tener una otra arquitectura siempre y cuando la nueva arquitectura sea compatible con el sistema operativo en el que se está implementando. Por ejemplo: Si tiene instalada la versión x86 de MyFavApp(v1.0.0.0) en un dispositivo x64 Windows 10 y el paquete de actualización (v2.0.0.0) es la versión x64: MyFavApp(1.0.0.0) se actualizará correctamente a MyFavApp(v2.0.0.0).
Un paquete de actualización puede pasar de un paquete de MSIX a un paquete de MSIXbundle, pero no al revés. Cuando se instala una agrupación de MSIXbundle, la actualización del paquete debe seguir siendo una agrupación.
Hay varias maneras de garantizar que la tecnología de actualización diferencial se optimice al máximo.
- Mantén los archivos del paquete pequeños; al hacerlo se garantiza que, si se necesita un cambio que afecta al archivo completo, la actualización siga siendo pequeña.
- Si es posible, los cambios en los archivos deben ser aditivos, ya que los cambios aditivos garantizan que los dispositivos del usuario final solo descarguen los bloques modificados.
- Si es posible, los cambios en los archivos deben estar contenidos en bloques de 64 KB; si la aplicación tiene archivos grandes y requiere cambios en el centro de un archivo, incluir los cambios en un conjunto de bloques ayudará mucho.