Tutoriel : Utiliser l’API du programme de démarrage dans une application empaquetée avec un emplacement externe ou non empaquetée qui utilise le SDK d’application Windows

Cet article explique comment configurer une application qui n’est pas installée à l’aide de MSIX (autrement dit, elle est empaquetée avec un emplacement externe ou non empaquetée) pour utiliser l’API de programme d’amorçage afin qu’elle charge explicitement le runtime du KIT de développement logiciel (SDK) d’application Windows et appelle les API du Kit de développement logiciel (SDK) d’application Windows. Les applications qui ne sont pas installées via MSIX incluent des applications empaquetées avec un emplacement externe et des applications non empaquetées.

Important

À compter du SDK d’application Windows 1.0, l’approche par défaut pour charger le SDK d’application Windows à partir d’une application packagée avec un emplacement externe ou non packagée consiste à utiliser l’initialisation automatique par le biais de la propriété <WindowsPackageType> du projet (ainsi qu’à apporter d’autres modifications de configuration). Pour connaître les étapes d’initialisation automatique dans le contexte du projet WinUI 3, consultez Créer votre premier projet WinUI 3. Ou, si vous avez un projet existant qui n’est pas WinUI 3, consultez Utiliser le SDK d’application Windows dans un projet existant.

Si vous avez des besoins avancés (tels que la gestion des erreurs personnalisées ou le chargement d’une version spécifique du SDK d'application Windows), vous pouvez appeler explicitement l’API du programme d’amorçage. Et c’est l’approche que cette rubrique illustre. Pour plus d’informations, consultez Utiliser le runtime du Kit de développement logiciel (SDK) d’application Windows pour les applications empaquetées avec un emplacement externe ou non empaquetées.

Cette rubrique illustre l’appel explicite de l’API de programme d’amorçage à partir d’un projet d’application console de base ; mais les étapes s’appliquent à toute application de bureau non empaquetée qui utilise le Kit de développement logiciel (SDK) de l’application Windows.

Avant de suivre ce tutoriel, nous vous recommandons de passer en revue l’architecture runtime pour en savoir plus sur la dépendance de package Framework que votre application prend lorsqu’elle utilise le Kit de développement logiciel (SDK) d’application Windows et les composants supplémentaires nécessaires pour travailler dans un package avec un emplacement externe ou une application non empaquetée.

Prérequis

  1. Installer les outils pour le SDK pour application Windows.
  2. Vérifiez que toutes les dépendances pour empaquetées avec un emplacement externe et les applications non empaquetées sont installées (consultez le guide de déploiement du Kit de développement logiciel (SDK) d’application Windows pour les applications dépendantes de l’infrastructure empaquetées avec un emplacement externe ou non empaquetées. Pour ce faire, vous pouvez exécuter facilement le programme d’installation du runtime du Kit de développement logiciel (SDK) d’application Windows.

Instructions

Vous pouvez suivre ce tutoriel à l’aide d’un projet C# ou C++.

Remarque

Les dépendances dynamiques et les API de démarrage échouent lorsqu'elles sont appelées par un processus élevé. Par conséquent, Visual Studio ne doit pas être lancé avec élévation de privilèges. Pour plus d’informations, voir Dépendances dynamiques ne prend pas en charge l’élévation #567 .

Suivez ces instructions pour configurer un projet WinUI 3 C# empaqueté avec un emplacement externe ou non empaqueté.

  1. Dans Visual Studio, créez un projet d’application console C#. Nommez le projet DynamicDependenciesTest. Après avoir créé le projet, vous devez avoir un « Hello, World ! » Application console C#.

  2. Configurez ensuite votre projet.

    1. Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur votre projet et choisissez Modifier le fichier de projet.
    2. Remplacez la valeur de l'élément TargetFramework par un moniker Target Framework. Par exemple, utilisez ce qui suit si votre application cible Windows 10, version 2004.
    <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
    
    1. Enregistrez et fermez le fichier projet.
  3. Changez la plateforme de votre solution en x64. La valeur par défaut dans un projet .NET est AnyCPU, mais WinUI 3 ne prend pas en charge cette plate-forme.

    1. Sélectionnez Build>Gestionnaire de configuration.
    2. Sélectionnez la liste déroulante sous Plate-forme de solution active et cliquez sur Nouveau pour ouvrir la boîte de dialogue Nouvelle plate-forme de solution.
    3. Dans la liste déroulante sous Type ou sélection de la nouvelle plate-forme, sélectionnez x64.
    4. Cliquez sur OK pour fermer la boîte de dialogue Nouvelle plate-forme de solution.
    5. Dans Configuration Manager, cliquez sur Fermer.
  4. Installez le package NuGet SDK d'application Windows dans votre projet.

    1. Dans l'explorateur de solutions, cliquez avec le bouton droit de la souris sur le nœud Dépendances et choisissez Gérer les packages Nuget.
    2. Dans la fenêtre NuGet Gestionnaire de package, sélectionnez l’onglet Parcourir et installez le package Microsoft.WindowsAppSDK.
  5. Vous êtes maintenant prêt à utiliser l’API de programme d’amorçage (voir Utiliser le runtime du Kit de développement logiciel (SDK) d’application Windows pour les applications empaquetées à l’aide d’un emplacement externe ou non empaquetées) pour prendre dynamiquement une dépendance sur le package d’infrastructure du Kit de développement logiciel (SDK) d’application Windows. Cela vous permet d'utiliser les API du SDK d'application Windows dans votre application.

    Ouvrez le fichier de code Program.cs et remplacez le code par défaut par le code suivant pour appeler la méthode Bootstrap.Initialize pour initialiser le programme d’amorçage. Ce code définit la version du Kit de développement logiciel (SDK) d’application Windows dont dépend l’application lors de l’initialisation du programme d’amorçage.

    Important

    Vous devez modifier le code ci-dessous pour répondre à votre configuration spécifique. Consultez les descriptions des paramètres de la méthode Bootstrap.Initialize afin de pouvoir spécifier l’une des versions du Kit de développement logiciel (SDK) d’application Windows que vous avez installée.

    using System;
    using Microsoft.Windows.ApplicationModel.DynamicDependency;
    
    namespace DynamicDependenciesTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                Bootstrap.Initialize(0x00010002);
                Console.WriteLine("Hello, World!");
    
                // Release the DDLM and clean up.
                Bootstrap.Shutdown();
            }
        }
    }
    

    À sa racine, l’API de programme d’amorçage est une API C/C++ native qui vous permet d’utiliser les API du SDK d’application Windows dans votre application. Toutefois, dans une application .NET qui utilise le Kit de développement logiciel (SDK) d’application Windows 1.0 ou version ultérieure, vous pouvez utiliser le wrapper .NET pour l’API de démarrage. Ce wrapper offre un moyen plus simple d’appeler l’API de programme d’amorçage dans une application .NET que d’appeler directement les fonctions C/C++ natives. L’exemple de code précédent appelle les méthodes Statiques Initialize et Shutdown de la classe Bootstrap dans le wrapper .NET pour l’API de démarrage.

  6. Pour démontrer que les composants d'exécution du SDK d'application Windows ont été chargés correctement, ajoutez du code qui utilise la classe ResourceManager du SDK d'application Windows pour charger une ressource de type chaîne.

    1. Ajoutez un nouveau fichier de ressources (.resw) à votre projet (laissez le nom par défaut).

    2. Le fichier de ressources étant ouvert dans l’éditeur, créez une nouvelle ressource de type chaîne avec les propriétés suivantes.

      • Nom : Message
      • Valeur : Bonjour, ressources!
    3. Enregistrez le fichier de ressources.

    4. Ouvrez le fichier de code Program.cs et remplacez la Console.WriteLine("Hello, World!"); ligne par le code suivant.

    // Create a resource manager using the resource index generated during build.
       var manager = new Microsoft.Windows.ApplicationModel.Resources.ResourceManager("DynamicDependenciesTest.pri");
    
    // Look up a string in the .resw file using its name.
    Console.WriteLine(manager.MainResourceMap.GetValue("Resources/Message").ValueAsString);
    
    1. Cliquez sur Démarrer sans débogage (ou Démarrer le débogage) pour générer et exécuter votre application. Vous devriez voir la chaîne Hello, resources! s'afficher avec succès.

Si votre projet est WPF

Pour une application Windows Presentation Foundation (WPF), consultez Utiliser le Kit de développement logiciel (SDK) d’application Windows dans une application WPF.