Mises à jour différentielles pour les packages d’application MSIX

Fonctionnement des mises à jour du package d’application MSIX

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. 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. 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. 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).

Tout commence au niveau du fichier AppxBlockMap.xml (les métadonnées mentionnées ci-dessus). Le fichier AppxBlockMap.xml est un document XML qui contient une liste bidimensionnelle d’informations se rapportant aux fichiers du 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 »).

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).

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. 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.

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.

Mise à niveau vers des versions plus récentes

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. É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.

Mise à niveau vers des versions antérieures

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. É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.

Optimisation des expériences de mise à niveau

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. 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.

PowerShell

L’installation d’un package d’application MSIX sur un appareil avec PowerShell s’appuie sur l’applet de commande add-appxpackage. 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.

Paramètre Description
-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.
-ForceApplicationShutdown Indique que cette applet de commande force l’arrêt de tous les processus actifs associés au package ou à ses dépendances.
-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.
-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. 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.
-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.
-Update Précise que le package en cours d’ajout est une mise à jour de package de dépendance. Un package de dépendance est supprimé lorsque l’application parente est supprimée. Si rien n’est précisé, le package n’est pas supprimé lorsque l’application parente est supprimée.

Pour obtenir la liste complète des paramètres disponibles pour cette applet de commande, consultez l’article PowerShell sur add-appxpackage.