Esercitazione: Usare l'API del bootstrapper in un'app confezionata con percorso esterno o non confezionata che utilizza il SDK per app di Windows

Questo articolo illustra come configurare un'app non installata usando MSIX (ovvero viene inserita in un pacchetto con percorso esterno o senza pacchetti) per usare l'API del programma di avvio automatico in modo che carichi in modo esplicito il runtime di SDK per app di Windows e chiami le API SDK per app di Windows. App non installate tramite MSIX includono app confezionate con origini esterne e app non confezionate.

Importante

A partire dalla SDK per app di Windows 1.0, l'approccio predefinito per il caricamento del SDK per app di Windows da un'applicazione impacchettata con posizione esterna o non impacchettata consiste nell'usare l'inizializzazione automatica tramite la proprietà del progetto <WindowsPackageType> (nonché apportare ulteriori modifiche alla configurazione). Per i passaggi necessari per l'inizializzazione automatica nel contesto del project WinUI 3, vedi Creare il primo project< WinUI/c0>. In alternativa, se si dispone di un project esistente che non è WinUI, vedere Usare il SDK per app di Windows in un project.

Se sono necessarie esigenze avanzate, ad esempio la gestione degli errori personalizzata o il caricamento di una versione specifica del SDK per app di Windows, è possibile chiamare in modo esplicito l'API del programma di avvio automatico. E questo è l'approccio illustrato in questo argomento. Per ulteriori informazioni, vedi anche Utilizzare il runtime di SDK per app di Windows per le app confezionate con percorso esterno o non confezionate.

Questo argomento illustra in modo esplicito la chiamata dell'API del bootstrapper da un progetto di app console di base, ma i passaggi si applicano a qualsiasi app desktop non impacchettata che utilizza il SDK per app di Windows.

Prima di completare questa esercitazione, è consigliabile esaminare l'architettura Runtime per altre informazioni sull'Framework dipendenza del pacchetto richiesta dall'app quando usa il SDK per app di Windows e sui componenti aggiuntivi necessari per lavorare in un pacchetto con un percorso esterno o un'app non in pacchetto.

Prerequisiti

  1. Installare gli strumenti per il SDK per app di Windows.
  2. Assicurarsi che tutte le dipendenze per le applicazioni impacchettate con un percorso esterno e le applicazioni non impacchettate siano installate (vedere guida alla distribuzione del SDK per app di Windows per le applicazioni dipendenti dal framework impacchettate con percorso esterno o non impacchettate). Un modo semplice per farlo è eseguire il programma di installazione del runtime di SDK per app di Windows.

Istruzioni

È possibile seguire questa esercitazione usando un project C# o C++.

Nota

Le dipendenze dinamiche e le API del programma di avvio automatico hanno esito negativo quando vengono chiamate da un processo con privilegi elevati. Di conseguenza, Visual Studio non deve essere avviato con privilegi elevati. Per ulteriori dettagli, vedere Dipendenze Dinamiche non supporta l'elevazione #567.

Seguire queste istruzioni per configurare un progetto WinUI C# impacchettato con pacchetto esterno o non impacchettato.

  1. In Visual Studio creare una nuova app C# Console App project. Denominare project DynamicDependenciesTest. Dopo aver creato il project, è necessario avere un'app console C# "Hello, World!".

  2. Configurare quindi il project.

    1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul project e scegliere Edit Project File.
    2. Sostituire il valore dell'elemento TargetFramework con un Moniker di destinazione Framework. Ad esempio, usare quanto segue se l'app è destinata Windows 10 versione 2004.
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    
    1. Salvare e chiudere il file project.
  3. Modificare la piattaforma della tua soluzione in x64. Il valore predefinito in un .NET project è AnyCPU, ma WinUI non supporta tale piattaforma.

    1. Selezionare Build>Gestione configurazione.
    2. Selezionare l'elenco a discesa sotto Piattaforma soluzione attiva e fare clic su Nuovo per aprire la finestra di dialogo Nuova piattaforma soluzione.
    3. Nella casella a discesa, alla voce Digita o seleziona la nuova piattaforma, selezionare x64.
    4. Scegliere OK per chiudere la finestra di dialogo Piattaforma di nuova soluzione.
    5. In Gestione configurazione fare clic su Close.
  4. Installare il pacchetto NuGet SDK per app di Windows nel project.

    1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo Dependencies e scegliere Gestisci pacchetti NuGet.
    2. Nella finestra NuGet Gestione pacchetti selezionare la scheda Browse e installare il pacchetto Microsoft.WindowsAppSDK.
  5. A questo punto è possibile usare l'API del programma di avvio automatico (vedere Usare il runtime di SDK per app di Windows per le app in pacchetto con percorso esterno o senza pacchetti) per assumere in modo dinamico una dipendenza dal pacchetto del framework SDK per app di Windows. In questo modo puoi usare le API SDK per app di Windows nella tua app.

    Aprire il file di codice Program.cs e sostituire il codice predefinito con il codice seguente per richiamare il metodo Bootstrap.Initialize per inizializzare il programma di avvio automatico. Questo codice definisce quale versione del SDK per app di Windows da cui l'app dipende al momento dell'inizializzazione del programma di avvio automatico.

    Importante

    Sarà necessario modificare il codice seguente in base alla configurazione specifica. Vedere le descrizioni dei parametri del metodo Bootstrap.Initialize in modo da poter specificare una delle versioni del SDK per app di Windows installate.

    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();
            }
        }
    }
    

    Alla radice, l'API del programma di avvio automatico è un'API C/C++ nativa che consente di usare le API SDK per app di Windows nell'app. In un'app .NET che usa il SDK per app di Windows 1.0 o versione successiva, è possibile usare il wrapper .NET per l'API del programma di avvio automatico. Questo wrapper offre un modo più semplice per chiamare l'API del programma di avvio automatico in un'app .NET rispetto alla chiamata diretta delle funzioni C/C++ native. Nell'esempio di codice precedente vengono chiamati i metodi Initialize e Shutdown della classe Bootstrap nella classe .NET wrapper per l'API del programma di avvio automatico.

  6. Per dimostrare che i componenti di runtime SDK per app di Windows sono stati caricati correttamente, aggiungere codice che usa la classe ResourceManager nella SDK per app di Windows per caricare una risorsa stringa.

    1. Aggiungere un nuovo file Resources (con estensione resw) al project (lasciare il nome predefinito).

    2. Con il file di risorse aperto nell'editor, creare una nuova risorsa di stringa con le proprietà seguenti.

      • Nome: Messaggio
      • Valore: Hello, resources!
    3. Salvare il file di risorse.

    4. Aprire il file del codice Program.cs e sostituire l'intero contenuto con il codice seguente Console.WriteLine("Hello, World!");.

    // 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. Fare clic su Avvia senza eseguire debug (o Avvia debug) per compilare ed eseguire l'app. Verrà visualizzata correttamente la stringa Hello, resources! .

Se il project è macchine virtuali Windows

Per un'app Windows Presentation Foundation (macchine virtuali Windows), vedere Usare il SDK per app di Windows in un progetto esistente.