Usare l'API di dipendenza dinamica per fare riferimento ai pacchetti MSIX in fase di esecuzione

Due implementazioni

Esistono due implementazioni dell'API di dipendenza dinamica tra cui scegliere, a seconda della piattaforma e dello scenario di destinazione:

  • L'API di dipendenza dinamica di SDK per app di Windows. Windows App SDK fornisce funzioni C e C++ (in msixdynamicdependency.h) e tipi Windows Runtime (WinRT) (nello spazio dei nomi Microsoft.Windows.ApplicationModel.DynamicDependency ) che implementano l'API di dipendenza dinamica. È possibile usare questa implementazione dell'API in qualsiasi versione di Windows che supporta SDK per app di Windows.
  • L'API di dipendenza dinamica di Windows 11. Windows 11 fornisce anche funzioni C e C++ che implementano l'API di dipendenza dinamica (in appmodel.h). Questa implementazione dell'API può essere usata solo dalle app destinate a Windows 11 versione 22H2 (10.0; Build 22621) e versioni successive.

Vedere anche Differenze tra le due implementazioni.

Nota

Come si vedrà in questo argomento, le API di SDK per app di Windows (C/C++) hanno gli stessi nomi delle API di Windows 11 (C/C++) con un prefisso aggiuntivo Mdd. Mdd è l'acronimo di Microsoft Dynamic Dependencies.

Sono inoltre disponibili diversi tipi di pacchetti MSIX, tra cui framework, risorsa, facoltativie pacchetti principali. L'API di dipendenza dinamica consente alle app non in pacchetto di fare riferimento e di usare pacchetti framework, ad esempio WinUI 2 e DirectX Runtime. Per altre informazioni sulle dipendenze dei pacchetti framework, vedere pacchetti framework MSIX e dipendenze dinamiche.

In particolare, l'API di dipendenza dinamica offre modi per gestire i riferimenti di installazione e riferimenti di runtime per i pacchetti MSIX. Per altre informazioni, vedere Modello di manutenzione per i pacchetti framework.

Usare API di dipendenza dinamica

Per usare l'API di dipendenza dinamica nell'app non in pacchetto per accettare una dipendenza da un pacchetto MSIX, seguire questo modello generale nel codice:

1. Creare un riferimento all'ora di installazione

Nel programma di installazione dell'app o durante la prima esecuzione dell'app, chiamare una delle funzioni o dei metodi seguenti per specificare un set di criteri per il pacchetto MSIX che è possibile usare. In questo modo si informa il sistema operativo che l'app ha una dipendenza da un pacchetto MSIX che soddisfa i criteri specificati. Se vengono installati uno o più pacchetti MSIX che soddisfano i criteri, Windows garantisce che almeno uno di essi rimanga installato fino all'eliminazione del riferimento in fase di installazione.

I criteri specificati includono il nome della famiglia di pacchetti, la versione minima e le architetture; ma non è possibile indicare un pacchetto MSIX specifico. Quando si aggiunge un riferimento di runtime al pacchetto MSIX, l'API sceglie la versione più alta che soddisfa i criteri specificati.

Occorre anche specificare un artefatto di durata, che può essere il processo corrente, un file o una chiave del Registro di sistema di Windows che indica al sistema che l'app è ancora disponibile. Se l'artefatto specificato non esiste più, il sistema operativo può presupporre che la dipendenza non è più necessaria e può disinstallare il pacchetto MSIX se non sono state dichiarate dipendenze da altre app. Questa funzionalità è utile per gli scenari in cui un'app non rimuove il pin in fase di installazione quando viene disinstallato.

Questa API restituisce un ID di dipendenza che deve essere usato in altre chiamate per creare riferimenti di runtime e per eliminare il riferimento all'ora di installazione.

2. Aggiungere un riferimento di runtime

Quando l'app deve usare il pacchetto MSIX, chiamare una delle funzioni o i metodi seguenti per richiedere l'accesso al pacchetto MSIX specificato e aggiungere un riferimento di runtime. La chiamata a questa API informa il sistema operativo che il pacchetto MSIX è in uso attivo e di gestire gli aggiornamenti delle versioni in modo side-by-side (in modo efficace la disinstallazione ritardata o la manutenzione della versione precedente fino a quando l'app non viene eseguita dopo che l'app viene usata). In caso di esito positivo, l'app potrebbe attivare le classi e usare il contenuto del pacchetto MSIX.

Quando si chiama questa API, è necessario passare l'ID di dipendenza restituito quando è stato creato il riferimento all'ora di installazione e la classificazione desiderata da usare per il pacchetto MSIX nel grafico del pacchetto del processo. Questa API restituisce il nome completo del pacchetto MSIX a cui è stato fatto riferimento e un handle usato per tenere traccia della dipendenza da uso attivo. Se sono installati più pacchetti MSIX che soddisfano i criteri specificati durante la creazione del riferimento all'ora di installazione, l'API sceglie la versione più alta che soddisfa i criteri.

3. Rimuovere un riferimento di runtime

Quando l'app viene eseguita usando il pacchetto MSIX, chiamare una delle funzioni o dei metodi seguenti per rimuovere il riferimento di runtime. In genere, l'app chiamerà questa API durante l'arresto. Questa API informa il sistema operativo che è sicuro rimuovere eventuali versioni non necessarie del pacchetto MSIX.

Quando si chiama questa API, è necessario passare l'handle restituito quando è stato aggiunto il riferimento di runtime.

4. Eliminare un riferimento all'ora di installazione

Quando l'app viene disinstallata, chiamare una delle funzioni o dei metodi seguenti per eliminare il riferimento all'ora di installazione. Questa API informa il sistema operativo che è sicuro rimuovere il pacchetto MSIX se nessun'altra app ha una dipendenza da essa.

Quando si chiama questa API, è necessario passare l'handle restituito quando è stato aggiunto il riferimento di runtime.

Differenze tra le due implementazioni.

La necessità di un gestore della durata (limitazione di Windows App SDK)

Quando si usa l'API di dipendenza dinamica di SDK per app di Windows per acquisire una dipendenza da un pacchetto MSIX, l'API richiede assistenza tramite un altro pacchetto installato ed è in esecuzione per informare Windows che il pacchetto MSIX è in uso e di bloccare la manutenzione del framework durante l'uso. Tale componente viene chiamato gestore di durata.

Per il pacchetto framework, Windows App SDK fornisce un componente di gestione della durata denominato DDLM (Dynamic Dependency Lifetime Manager). Tuttavia, nessun altro pacchetto framework attualmente fornisce un componente di gestione della durata simile di Microsoft.

L'API di dipendenza dinamica di Windows 11 non ha questa limitazione.

Riferimento e uso di un pacchetto principale (limitazione di Windows App SDK)

Una dipendenza dinamica può sempre scegliere come destinazione un pacchetto di framework. Ma solo l'API di dipendenza dinamica di Windows 11 può fare riferimento e usare anche pacchetti principali.

Il pacchetto principale deve avere configurato correttamente il file di origine del manifesto del pacchetto dell'app (il file Package.appxmanifest in Visual Studio). In particolare, il pacchetto principale (la destinazione, non il chiamante) deve impostare <uap15:DependencyTarget>true</> (vedere uap15:DependencyTarget). Lo scopo di <uap15::DependencyTarget> è quindi consentire a una dipendenza dinamica di specificare come destinazione un pacchetto principale. In altre parole, il pacchetto principale deve acconsentire esplicitamente all'uso di se stesso come dipendenza dinamica (mentre i pacchetti del framework consentono sempre in modo implicito).

Fare riferimento al pacchetto framework di SDK per app di Windows (limitazione di SDK per app di Windows)

In un'app non in pacchetto, è possibile usare l'API di dipendenza dinamica di SDK per app di Windows per fare riferimento al relativo pacchetto framework (come è possibile fare riferimento ad altri pacchetti MSIX con esso). È invece necessario usare l'API del programma di avvio automatico fornita da SDK per app di Windows. L'API del programma di avvio automatico è una forma specializzata dell'API di dipendenza dinamica progettata per acquisire dipendenze dal pacchetto framework di SDK per app di Windows. Per altre informazioni vedere Usare il runtime di Windows App SDK per le app in pacchetto con percorso esterno o senza pacchetti.

L'API di dipendenza dinamica di Windows 11 non ha questa limitazione.