Packages d’infrastructure MSIX et dépendances dynamiques
Article
Cet article présente des concepts importants liés aux packages d’infrastructure MSIX. Les informations contenues dans cet article donnent un éclairage contextuel utile pour mieux comprendre comment est conçue et à quoi sert la fonctionnalité des dépendances dynamiques dans le SDK d’application Windows et dans le système d’exploitation Windows 11. Cette fonctionnalité permet à vos applications de référencer et d’utiliser des packages d’infrastructure MSIX au moment de l’exécution.
Packages d’infrastructure et graphe de package
MSIX est un format de package qui offre une expérience moderne d’empaquetage et de déploiement. Ce format offre aussi un moyen propre et fiable d’empaqueter des bibliothèques, du contenu et des composants redistribuables par le biais de packages d’infrastructure MSIX. Un package d’infrastructure MSIX permet aux applications empaquetées d’accéder à des composants via une seule source partagée sur l’appareil de l’utilisateur, au lieu de les regrouper dans le package de l’application. Parmi les packages d’infrastructure courants figurent le SDK d’application Windows (y compris WinUI3), WinUI2, VCLibs et le runtime DirectX.
À partir de Windows 8 jusqu’à Windows 10 et Windows 11, chaque processus comporte un graphe de package qui fournit la liste de tous les packages disponibles pour l’application, notamment les packages d’infrastructure, de ressources, facultatifs et principaux. Ce graphe permet à l’application de charger des DLL, du contenu et des déclarations de classe au moment de l’exécution fournis par un package référencé. Historiquement, ce graphe était fixé au moment de la création du processus et il n’existait aucun moyen de le modifier au moment de l’exécution :
Pour les applications empaquetées, le graphe était initialisé en fonction des dépendances de package déclarées dans l’élément PackageDependency dans le manifeste du package de l’application. Lors de la génération d’une application empaquetée, cette initialisation était généralement effectuée automatiquement pendant le processus de génération en fonction des références et dépendances du projet.
Pour les applications non empaquetées, le graphe du package était vide et ne pouvait pas être modifié. Par conséquent, les applications non empaquetées étaient limitées à l’ordre de recherche des DLL standard et ne pouvaient pas accéder aux packages d’infrastructure.
Cette restriction du graphe de package statique est levée avec l’introduction de la prise en charge des dépendances dynamiques à la fois dans le SDK d’application Windows et dans Windows 11. Les développeurs peuvent utiliser des dépendances dynamiques pour référencer et utiliser des packages d’infrastructure MSIX à partir de leurs applications au moment de l’exécution. Les dépendances dynamiques suppriment la restriction du graphe de package statique dans les applications, et les développeurs peuvent déterminer leur façon d’exploiter des packages d’infrastructure.
Principaux scénarios pour les dépendances dynamiques
Bien que les dépendances dynamiques permettent à toute application d’ajouter une dépendance de package d’infrastructure au moment de l’exécution, cette fonctionnalité est principalement destinée à être utilisée par les applications empaquetées avec un emplacement externe ou par les applications non empaquetées. Les applications empaquetées peuvent toujours continuer à ajouter des dépendances statiques par le biais de l’élément PackageDependency dans leur manifeste du package.
Dans certains cas, les développeurs peuvent avoir besoin d’utiliser des dépendances dynamiques pour référencer un autre package d’infrastructure (différent du package d’infrastructure du SDK d’application Windows) à partir d’une application non incluse dans un package, comme le package d’infrastructure pour WinUI2 ou le runtime DirectX. Pour plus d’informations sur ce scénario, consultez Utiliser l’API de dépendance dynamique pour référencer des packages MSIX au moment de l’exécution.
Modèle de service pour les packages d’infrastructure
La fonctionnalité des dépendances dynamiques préserve l’intégrité du pipeline de service pour le package d’infrastructure référencé et utilisé dynamiquement au moment de l’exécution.
Les packages d’infrastructure MSIX prennent en charge le service dans un modèle côte à côte, ce qui signifie que chaque version est installée dans son propre dossier versionné distinct. Les applications en cours d’utilisation peuvent ainsi rester opérationnelles même quand une application plus récente installe une version plus récente du package d’infrastructure. Le système d’exploitation intègre une logique de désinstallation pour déterminer quand supprimer les versions antérieures d’un package d’infrastructure donné, en fonction de la présence de références au moment de l’installation et de références au moment de l’exécution pour le package.
Quand une application est installée, elle peut créer une référence au moment de l’installation à un package d’infrastructure. Cette référence indique au système d’exploitation que l’application comporte une dépendance vis-à-vis du package d’infrastructure spécifié, de sorte que ce système d’exploitation ne va pas désinstaller le package d’infrastructure pendant l’installation de votre application.
Quand une application a besoin d’utiliser des API ou du contenu dans un package d’infrastructure, elle peut ajouter au package d’infrastructure une référence au moment de l’exécution. Cette référence indique au système d’exploitation que le package d’infrastructure est en cours d’utilisation et qu’il doit gérer les mises à jour de version de manière côte à côte. Si une nouvelle version du package d’infrastructure est installée, alors qu’une application en cours d’exécution utilise une version antérieure, le système d’exploitation ne peut pas supprimer la version antérieure tant que toutes les références au moment de l’exécution à cette version antérieure n’ont pas été supprimées.
Prenons l’exemple de ce scénario :
L’application A est en cours d’exécution et utilise la version 1.0.0.0 d’un package d’infrastructure donné.
L’application B est installée et comporte une dépendance vis-à-vis de la version 1.0.0.1 du même package d’infrastructure.
Dans ce scénario, les deux versions du package d’infrastructure vont être installées et utilisées par l’application A et l’application B. Néanmoins, quand l’utilisateur ferme l’application A, puis la redémarre, la version la plus récente 1.0.0.1 du package d’infrastructure est sélectionnée. À ce stade, l’exigence de la référence au moment de l’exécution n’est plus valide pour la version 1.0.0.0 du package d’infrastructure et le système d’exploitation peut supprimer sans danger la version 1.0.0.0. Par la suite, quand l’application A et l’application B sont désinstallées par l’utilisateur, l’exigence de la référence au moment de l’installation n’est plus valide et le système d’exploitation peut sans danger supprimer entièrement le package d’infrastructure.
Pour les applications empaquetées qui utilisent l’élément PackageDependency pour spécifier des références statiques à des packages d’infrastructure, les références au moment de l’installation des packages d’infrastructure sont suivies par le système d’exploitation lors de l’installation ou de la désinstallation de l’application. Pour les références au moment de l’exécution gérées à l’aide de la fonctionnalité des dépendances dynamiques, le système d’exploitation sait quand une application incluse dans un package est en cours d’exécution et peut éviter de supprimer ses packages d’infrastructure en cours d’utilisation quand une plus récente est disponible.
La source de ce contenu se trouve sur GitHub, où vous pouvez également créer et examiner les problèmes et les demandes de tirage. Pour plus d’informations, consultez notre guide du contributeur.
Commentaires sur Windows developer
Windows developer est un projet open source. Sélectionnez un lien pour fournir des commentaires :
Planifiez et concevez votre méthodologie de projet pour implémenter avec succès les applications de finances et d’opérations avec les services FastTrack, la gestion des données et plus encore.