Partager via


Utiliser l’API de dépendance dynamique pour référencer des packages MSIX au moment de l’exécution

Les deux implémentations

Vous avez le choix entre deux implémentations de l’API de dépendance dynamique, selon votre plateforme cible et votre scénario :

  • L’API de dépendance dynamique du SDK d’application Windows. Le SDK d’application Windows fournit des fonctions C et C++ (dans msixdynamicdependency.h), et des types Windows Runtime WinRT (dans l’espace de noms Microsoft.Windows.ApplicationModel.DynamicDependency) qui implémentent l’API de dépendance dynamique. Vous pouvez utiliser cette implémentation de l’API sur n’importe quelle version de Windows qui prend en charge le SDK d’application Windows.
  • L’API de dépendance dynamique de Windows 11. Windows 11 fournit aussi des fonctions C et C++ qui implémentent l’API de dépendance dynamique (dans appmodel.h). Cette implémentation de l’API peut seulement être utilisée par les applications qui ciblent Windows 11 version 22H2 (10.0 ; Build 22621) et ultérieure.

Consultez également la section Différences entre les deux implémentations.

Notes

Comme vous le verrez dans cette rubrique, les API du SDK d’application Windows (C/C++) ont les mêmes noms que les API Windows 11 (C/C++) avec le préfixe Mdd en plus. Mdd signifie Microsoft Dynamic Dependencies.

Et il existe différents types de packages MSIX, notamment des packages d’infrastructure, de ressources, facultatifs et principaux. L’API de dépendance dynamique permet aux applications non empaquetées de référencer et d’utiliser des packages d’infrastructure comme WinUI 2 et le runtime DirectX. Pour plus d’informations sur les dépendances des packages d’infrastructure, consultez Packages d’infrastructure MSIX et dépendances dynamiques.

Plus précisément, l’API de dépendance dynamique propose des moyens de gérer les références au moment de l’installation et les références au moment de l’exécution pour les packages MSIX. Pour plus d’informations, consultez Modèle de maintenance pour les packages d’infrastructure.

Utiliser l’API de dépendance dynamique

Pour utiliser l’API de dépendance dynamique dans votre application non incluse dans un package pour accepter une dépendance vis-à-vis d’un package MSIX, suivez ce modèle général dans votre code :

1. Créer une référence au moment de l’installation

Dans le programme d’installation de votre application ou pendant la première exécution de votre application, appelez l’une des fonctions ou méthodes suivantes pour spécifier un ensemble de critères pour le package MSIX que vous voulez utiliser. Cet appel permet d’indiquer au système d’exploitation que votre application comporte une dépendance vis-à-vis d’un package MSIX qui répond aux critères spécifiés. Si un ou plusieurs packages MSIX répondant aux critères sont installés, Windows veille à ce qu’au moins un de ces packages reste installé jusqu’à la suppression de la référence au moment de l’installation.

Les critères que vous spécifiez comprennent le nom de la famille de packages, la version minimale et les architectures ; mais vous ne pouvez pas indiquer un package MSIX spécifique. Quand vous ajoutez au package MSIX une référence au moment de l’exécution, l’API choisit la version la plus élevée qui répond aux critères spécifiés.

Vous devez également spécifier un artefact de durée de vie, qui peut être le processus en cours, un fichier ou une clé de Registre Windows qui indique au système que l’application est toujours disponible. Si l’artefact spécifié n’existe plus, le système d’exploitation peut partir du principe que la dépendance n’est plus nécessaire et désinstaller le package MSIX si aucune autre application n’a déclaré une dépendance vis-à-vis de celui-ci. Cette fonctionnalité s’avère utile dans les scénarios où une application omet de supprimer le repère au moment de l’installation lors de sa désinstallation.

Cette API retourne un ID de dépendance qui doit être utilisé dans d’autres appels pour créer des références au moment de l’exécution et pour supprimer la référence au moment de l’installation.

2. Ajouter une référence au moment de l’exécution

Quand votre application a besoin d’utiliser le package MSIX, appelez l’une des fonctions ou méthodes suivantes pour demander l’accès au package MSIX spécifié et ajouter une référence au moment de l’exécution pour celui-ci. L’appel de cette API informe le système d’exploitation que le package MSIX est en cours d’utilisation et qu’il doit gérer les mises à jour de version de manière côte à côte (en retardant la désinstallation ou la maintenance de l’ancienne version tant que l’application n’a pas fini de l’utiliser). En cas de réussite, l’application peut activer des classes et utiliser le contenu du package MSIX.

Quand vous appelez cette API, vous devez passer l’ID de dépendance retourné lors de la création de la référence au moment de l’installation et le rang souhaité à utiliser pour le package MSIX dans le graphe de package du processus. Cette API retourne le nom complet du package MSIX qui a été référencé, ainsi qu’un descripteur utilisé pour effectuer le suivi de la dépendance en cours d’utilisation. Si plusieurs packages MSIX installés répondent aux critères que vous avez spécifiés lors de la création de la référence au moment de l’installation, l’API choisit la version la plus élevée qui répond à ces critères.

3. Supprimer la référence au moment de l’exécution

Quand votre application a fini d’utiliser le package MSIX, appelez l’une des fonctions ou méthodes suivantes pour supprimer la référence au moment de l’exécution. Normalement, votre application va appeler cette API pendant l’arrêt. Cette API informe le système d’exploitation qu’il peut supprimer toutes les versions inutiles du package MSIX sans aucun risque.

Quand vous appelez cette API, vous devez passer le descripteur qui a été retourné quand vous avez ajouté la référence au moment de l’exécution.

4. Supprimer la référence au moment de l’installation

Lors de la désinstallation de votre application, appelez l’une des fonctions ou méthodes suivantes pour supprimer la référence au moment de l’installation. Cette API informe le système d’exploitation qu’il peut supprimer le package MSIX sans aucun risque si aucune autre application n’en dépend.

Quand vous appelez cette API, vous devez passer l’ID de dépendance qui a été retourné lors de la création de la référence au moment de l’installation.

Différences entre les deux implémentations

Le besoin d’un gestionnaire de durée de vie (limite du SDK d’application Windows)

Quand vous utilisez l’API de dépendance dynamique du SDK d’application Windows pour accepter une dépendance vis-à-vis d’un package MSIX, l’API a besoin de l’aide d’un autre package installé et d’un autre processus en cours d’exécution pour informer Windows que le package MSIX est en cours d’utilisation et qu’il est nécessaire de bloquer la maintenance de l’infrastructure pendant son utilisation. Ce composant est un gestionnaire de durée de vie.

Pour son package d’infrastructure, le SDK d’application Windows fournit un composant de gestionnaire de durée de vie appelé DDLM (Dynamix Dependency Lifetime Manager). Toutefois, aucun autre package d’infrastructure ne fournit actuellement un composant de gestionnaire de durée de vie similaire à partir de Microsoft.

L’API de dépendance dynamique de Windows 11 n’a pas cette limite.

Référencer et utiliser un package principal (limite du SDK d’application Windows)

Une dépendance dynamique peut toujours cibler un package d’infrastructure. Mais seule l’API de dépendance dynamique de Windows 11 peut aussi référencer et utiliser des packages principaux.

Le package principal doit avoir configuré correctement le fichier source du manifeste du package de l’application (fichier Package.appxmanifest dans Visual Studio). Plus précisément, le package principal (la cible, et non l’appelant) doit définir <uap15:DependencyTarget>true</> (voir uap15:DependencyTarget). Par conséquent, l’objectif de <uap15::DependencyTarget> est de permettre à une dépendance dynamique de cibler un package principal. En d’autres termes, le package principal doit accepter d’être utilisé comme dépendance dynamique (tandis que les packages d’infrastructure l’autorisent toujours implicitement).

Référence au package d’infrastructure du kit SDK d’application Windows (Limite du SDK d’application Windows)

Dans une application non empaquetée, vous ne pouvez pas utiliser l’API de dépendance dynamique du SDK d’application Windows pour référencer le package d’infrastructure du SDK d’application Windows (comme vous pouvez le faire avec d’autres packages MSIX). Au lieu de cela, il faut utiliser l’API du programme d’amorçage fournie par le SDK d’application Windows. L’API du programme d’amorçage est une forme spécialisée d’API de dépendance dynamique, conçue pour accepter les dépendances vis-à-vis du package d’infrastructure du SDK d’application Windows. Pour plus d’informations, consultez Utiliser le runtime du SDK Windows App pour les applications empaquetées avec un emplacement externe ou non empaquetées.

L’API de dépendance dynamique de Windows 11 n’a pas cette limite.