Mises à jour différentielles pour les packages d’application MSIXDifferential updates for MSIX app packages

Fonctionnement des mises à jour du package d’application MSIXUnderstanding MSIX app package updates

Lorsqu’un package d’application MSIX est créé, un fichier manifeste est généré pour contenir les détails associés aux fichiers inclus dans le package d’application MSIX.When an MSIX app package are created, a manifest file is generated containing details related to the files included in the MSIX app package. Durant la création du package, un élément de métadonnées est créé et stocké dans le package .msix ou msixbundle, ce qui permet à des composants du package d’être identifiés de manière unique par Windows.During package creation, a piece of metadata is created and stored in the .msix or .msixbundle package which allows parts of the package to be uniquely identified by the Windows. Par la suite, lors d’une mise à jour, Windows utilise ce fichier de métadonnées pour comparer l’ancien package au nouveau et déterminer les éléments qui doivent être téléchargés sur l’appareil.Later on, during update, Windows can use this metadata file to compare the old package to the new package and determine the things that need to be downloaded to the device. Le fait que ces métadonnées permettent à des composants du package d’être identifiés de manière unique signifie que le mécanisme de mise à jour différentielle fonctionne parfaitement, de n’importe quelle version de package vers une autre version (en supposant que le package source comporte une version inférieure au package cible).Given this metadata allows parts of the package to be uniquely identified, this means the differential update machinery fully functions from any version of a package to any other version of a package (assuming source package has a lower version than target package).

Tout commence au niveau du fichier AppxBlockMap.xml (les métadonnées mentionnées ci-dessus).It all starts at the AppxBlockMap.xml file (the aforementioned metadata). Le fichier AppxBlockMap.xml est un document XML qui contient une liste bidimensionnelle d’informations se rapportant aux fichiers du package.The AppxBlockMap.xml file is an XML document that contains a two dimensional list of information about files in the package. La première dimension présente des détails d’ordre général sur le fichier (par exemple, un nom et une taille) tandis que la deuxième dimension fournit des représentations du hachage SHA2-256 de chaque secteur de 64 Ko de ce fichier (également appelé le « bloc »).The first dimension lays out high level details on the file (e.g. name and size) and the second dimension provides SHA2-256 hash representations of each 64KB slice of that file (aka the "block").

Le premier hachage représente le premier bloc de 64 Ko du fichier et le deuxième hachage, les 35 Ko restants (sur la base d’un fichier de 101 188 octets).The first hash represents the first 64KB block of the file and the second hash represents the remaining 35KB - given the file is 101188 bytes.

Pendant une mise à jour, si le deuxième bloc de ce fichier est modifié, le hachage est également mis à jour pour refléter ce fait.During an update, if the second block of that file was modified, the hash would also be updated to reflect this fact. Le composant de téléchargement intègre cela et n’extrait que le deuxième bloc ; il réutilise le premier bloc inchangé de l’ancien package.The download component understands this and will only pull down the second block and reuse the first unchanged block from the old package.

Par ailleurs, si un fichier entier n’a pas changé (ce qui est déterminé par le jeu complet de blocs qui ne change pas), ce fichier est réutilisable à partir du package existant, ce qui se traduit par des économies considérables pour les utilisateurs de Windows 10.Furthermore, if an entire file hasn't changed (which is determined by the full set of blocks not changing) then that file can be reused from the existing package - resulting in tremendous savings for Windows 10 users

Mise à niveau vers des versions plus récentesUpgrading to newer versions

Lorsqu’une version plus récente du package d’application MSIX est installée, le fichier manifeste est comparé et les blocs de fichiers modifiés sont identifiés.When a newer version of the MSIX app package is installed, the manifest file is compared and modified file blocks are identified. Étant donné que le package d’application MSIX est mis à niveau vers la version la plus récente, seuls les fichiers modifiés sont récupérés, ce qui réduit la consommation de bande passante si les applications mises à jour résident sur un partage réseau, ou sont externes à une organisation.As the MSIX app package is upgraded to the newer version only the modified files are retrieved decreasing the bandwidth consumption if updated applications reside on a network share or external to an organization.

Mise à niveau vers des versions antérieuresUpgrading to older versions

Quand une version antérieure du package d’application MSIX est installée, le fichier manifeste est comparé et les blocs de fichiers modifiés sont identifiés.When an older version of the MSIX app package is installed, the manifest file is compared and modifed file blocks are identified. Étant donné que le package d’application MSIX est mis à niveau vers l’ancienne version, seuls les fichiers modifiés sont récupérés, ce qui réduit la consommation de bande passante si les applications mises à jour résident sur un partage réseau, ou sont externes à une organisation.As the MSIX app package is upgraded to the older version only the modified files are retrieved decreasing the bandwidth consumption if updated applications reside on a network share or external to an organization.

Optimisation des expériences de mise à niveauOptimizing upgrade experiences

La remise ou l’installation d’un package d’application MSIX sur un appareil peuvent être configurées pour améliorer l’expérience des utilisateurs.The delivery or installation of an MSIX app package to a device can be configured to improve the users experience. Quand une application est déployée, l’appareil peut être configuré pour mettre à jour l’application une fois que l’utilisateur l’a fermée, ou pour forcer l’application à se fermer et à se mettre à jour.When an app is deployed the device can be configured to update the app after the user closes the app , or force the application to be closed and update the app forcably.

PowerShellPowerShell

L’installation d’un package d’application MSIX sur un appareil avec PowerShell s’appuie sur l’applet de commande add-appxpackage.Installing an MSIX app package to a device using PowerShell leverages the add-appxpackage cmdlet. Cette applet de commande contient les paramètres suivants qui modifient l’expérience utilisateur de mise à niveau ou d’installation du package d’application MSIX.This cmdlet contains the following parameters which alter the MSIX app package installation or upgrade user experience.

-DeferRegistrationWhenPackagesAreInUse-DeferRegistrationWhenPackagesAreInUse Indique que cette applet de commande empêche le package d’application MSIX de se mettre à jour tandis que l’application est actuellement ouverte par l’utilisateur.Indicates that this cmdlet will prevent the MSIX app package from updating while the user currently has the app open.
-ForceApplicationShutdown-ForceApplicationShutdown Indique que cette applet de commande force l’arrêt de tous les processus actifs associés au package ou à ses dépendances.Indicates that this cmdlet forces all active processes that are associated with the package or its dependencies to shut down
-ForceUpdateFromAnyVersion-ForceUpdateFromAnyVersion Indique que le package d’application MSIX force la préparation/l’inscription d’une version spécifique d’un package, qu’une version plus récente soit ou non déjà préparée/inscrite.Indicates that the MSIX app package will force a specific version of a package to be staged/registered, regardless of whether a higher version is already stages/registered.
-InstallAllResources-InstallAllResources Indique que l’applet de commande force le déploiement de tous les packages de ressources spécifiés à partir d’un argument de bundle.Indicates that the cmdlet forces the deployment of all resource packages specified from a bundle argument. Cette opération remplace la vérification de l’applicabilité des ressources du moteur de déploiement, et force la préparation de tous les packages de ressources.This overrides the resource applicability check of the deployment engine and forces staging of all resource packages.
-RetainFilesOnFailure-RetainFilesOnFailure En cas d’échec de déploiement, si ce commutateur est défini sur True, les fichiers qui ont été créés sur l’ordinateur cible pendant le processus d’installation ne sont pas supprimés.In the case of a failed deployment, if this switch is set to True, files that have been created on the target machine during the installation process are not removed.
-Update-Update Précise que le package en cours d’ajout est une mise à jour de package de dépendance.Specifies that the package being added is a dependency package update. Un package de dépendance est supprimé lorsque l’application parente est supprimée.A dependency package is removed when the parent app is removed. Si rien n’est précisé, le package n’est pas supprimé lorsque l’application parente est supprimée.If not specified, the package will not be removed when the parent app is removed.

Pour obtenir la liste complète des paramètres disponibles pour cette applet de commande, consultez l’article PowerShell sur add-appxpackage.For a full list of parameters available for this cmdlet, please visit the PowerShell article on add-appxpackage.