Verwenden der API für dynamische Abhängigkeiten zum Verweisen auf MSIX-Pakete zur Laufzeit

Die beiden Implementierungen

Es gibt zwei Implementierungen der API für dynamische Abhängigkeiten, zwischen denen Sie je nach Zielplattform und Szenario auswählen können:

  • Die API für dynamische Abhängigkeiten des Windows App SDK. Das Windows App SDK stellt C und C++-Funktionen (in msixdynamicdependency.h) sowie Windows-Runtime (WinRT)-Typen (im Namespace Microsoft.Windows.ApplicationModel.DynamicDependency) bereit, die die API für dynamische Abhängigkeiten implementieren. Sie können diese Implementierung der API für jede Version von Windows verwenden, die das Windows App SDKunterstützt.
  • Die API für dynamische Abhängigkeiten von Windows 11. Auch Windows 11 bietet C und C++-Funktionen, die die API für dynamische Abhängigkeiten implementieren (in appmodel.h). Diese Implementierung der API kann nur von Apps verwendet werden, die Windows 11, Version 22H2 (10.0; Build 22621) und höher, als Ziel verwenden.

Siehe auch Unterschiede zwischen den beiden Implementierungen.

Hinweis

Wie in diesem Thema beschrieben, haben die APIs des Windows App SDK (C/C++) die gleichen Namen wie die Windows 11 (C/C++)-APIs mit einem zusätzlichen Mdd-Präfix. Mdd steht für Microsoft Dynamic Dependencies, dynamische Abhängigkeiten von Microsoft.

Außerdem gibt es verschiedene Arten von MSIX-Paketen, einschließlich Framework, Ressource, optionalund Hauptpakete. Die dynamische Abhängigkeits-API ermöglicht es nicht gepackten Apps, auf Frameworkpakete wie WinUI 2 und die DirectX-Runtime zu verweisen und diese zu verwenden. Weitere Informationen zu Frameworkpaketabhängigkeiten finden Sie unter MSIX-Frameworkpakete und dynamische Abhängigkeiten.

Insbesondere die API für dynamische Abhängigkeiten bietet Möglichkeiten zum Verwalten der Installationszeitverweise und Laufzeitverweise für MSIX-Pakete. Weitere Informationen finden Sie unter Wartungsmodell für Frameworkpakete.

Verwenden der API für dynamische Abhängigkeiten

Um die API für dynamische Abhängigkeiten in Ihrer nicht gepackten App zu verwenden, um eine Abhängigkeit von einem MSIX-Paket zu übernehmen, befolgen Sie dieses allgemeine Muster in Ihrem Code:

1. Erstellen eines Installationszeitverweises

Rufen Sie im Installationsprogramm Ihrer App oder während der ersten Ausführung der App eine der folgenden Funktionen oder Methoden auf, um einen Satz von Kriterien für das MSIX-Paket anzugeben, das Sie verwenden möchten. Dadurch wird das Betriebssystem darüber informiert, dass Ihre App von einem MSIX-Paket abhängig ist, das die angegebenen Kriterien erfüllt. Sind mehrere MSIX-Pakete installiert, die die Kriterien erfüllen, stellt Windows sicher, dass mindestens eines dieser MSIX-Pakete installiert bleibt, bis der Installationszeitverweis gelöscht wird.

Die von Ihnen angegebenen Kriterien umfassen den Namen der Paketfamilie, die Mindestversion sowie Architekturen; Sie können allerdings kein bestimmtes MSIX-Paket angeben. Wenn Sie dem MSIX-Paket einen Laufzeitverweis hinzufügen, wählt die API die höchste Version aus, die die angegebenen Kriterien erfüllt.

Sie müssen auch ein Lebensdauerartefakt angeben, bei dem es sich um den aktuellen Prozess, eine Datei oder einen Windows-Registrierungsschlüssel handeln kann, der dem System angibt, dass die App noch verfügbar ist. Wenn das angegebene Artefakt nicht mehr vorhanden ist, kann das Betriebssystem davon ausgehen, dass die Abhängigkeit nicht mehr benötigt wird und das MSIX-Paket deinstallieren, sofern keine anderen Apps eine Abhängigkeit davon deklariert haben. Dieses Feature ist nützlich für Szenarien, in denen eine App das Entfernen des Installationszeitpins bei der Deinstallation nicht zulässt.

Diese API gibt eine Abhängigkeits-ID zurück, die in anderen Aufrufen verwendet werden muss, um Laufzeitverweise zu erstellen und den Installationszeitverweis zu löschen.

2. Hinzufügen eines Laufzeitverweises

Wenn Ihre App das MSIX-Paket verwenden muss, rufen Sie eine der folgenden Funktionen oder Methoden auf, um Zugriff auf das angegebene MSIX-Paket anzufordern und dafür einen Laufzeitverweis hinzuzufügen. Wenn Sie diese API aufrufen, wird das Betriebssystem darüber informiert, dass das MSIX-Paket aktiv verwendet wird und alle Versionsupdates parallel ausgeführt werden (die Deinstallation oder anderweitige Wartung der älteren Version wird effektiv verzögert, bis die App sie nicht mehr verwendet). Bei Erfolg kann die App Klassen aktivieren und Inhalte aus dem MSIX-Paket verwenden.

Wenn Sie diese API aufrufen, müssen Sie die Abhängigkeits-ID übergeben, die beim Erstellen des Installationszeitverweises zurückgegeben wurde, sowie den gewünschten Rang, der für das MSIX-Paket im Paketdiagramm des Prozesses verwendet werden soll. Diese API gibt den vollständigen Namen des MSIX-Pakets zurück, auf das verwiesen wurde, und ein Handle, das verwendet wird, um die Abhängigkeit „aktiv verwendet“ nachzuverfolgen. Wenn mehrere MSIX-Pakete installiert sind, die die Kriterien erfüllen, die Sie beim Erstellen des Installationszeitverweises festgelegt haben, wählt die API die höchste Version aus, die die Kriterien erfüllt.

3. Entfernen des Laufzeitverweises

Wenn Ihre App das MSIX-Paket nicht mehr verwendet, rufen Sie eine der folgenden Funktionen oder Methoden auf, um den Laufzeitverweis zu entfernen. In der Regel ruft Ihre App diese API während des Herunterfahrens auf. Diese API informiert das Betriebssystem darüber, dass unnötige Versionen des MSIX-Pakets sicher entfernt werden können.

Wenn Sie diese API aufrufen, müssen Sie das Handle übergeben, das beim Hinzufügen des Laufzeitverweises zurückgegeben wurde.

4. Löschen des Installationszeitverweises

Wenn Ihre App deinstalliert wird, rufen Sie eine der folgenden Funktionen oder Methoden auf, um den Installationszeitverweis zu löschen. Diese API informiert das Betriebssystem darüber, dass das MSIX-Paket sicher entfernt werden kann, wenn keine anderen Apps davon abhängig sind.

Wenn Sie diese API aufrufen, müssen Sie die Abhängigkeits-ID übergeben, die beim Erstellen des Installationszeitverweises zurückgegeben wurde.

Unterschiede zwischen den beiden Implementierungen

Die Notwendigkeit eines Lebensdauer-Managers (Einschränkung des Windows App SDK)

Wenn Sie die API für dynamische Abhängigkeiten des Windows App SDK verwenden, um eine Abhängigkeit von einem MSIX-Paket zu übernehmen, benötigt die API Hilfe über ein anderes installiertes Paket und einen ausgeführten Prozess, um Windows darüber zu informieren, dass das MSIX-Paket verwendet wird, und zu verhindern, dass für das Framework eine Wartung ausgeführt wird, während es verwendet wird. Diese Komponente wird als Lebensdauer-Manager bezeichnet.

Das Windows-App SDK stellt für sein Frameworkpaket eine Komponente zur Verwaltung der Lebensdauer bereit, die als Dynamic Dependency Lifetime Manager (DDLM) bezeichnet wird. Allerdings bieten derzeit keine anderen Frameworkpakete eine ähnliche Komponente von Microsoft zur Verwaltung der Lebensdauer.

Die API für dynamische Abhängigkeiten von Windows 11 hat diese Einschränkung nicht.

Verweisen und Verwenden eines Hauptpakets (Einschränkung des Windows App SDK)

Eine dynamische Abhängigkeit kann immer auf ein Frameworkpaket abzielen. Die API für dynamische Abhängigkeiten von Windows 11 kann jedoch auch auf Hauptpakete verweisen und sie verwenden.

Das Hauptpaket muss die Quelldatei des App-Paketmanifests (die Datei Package.appxmanifest in Visual Studio) ordnungsgemäß konfiguriert haben. Insbesondere muss das Hauptpaket (das Ziel, nicht der Aufrufer) <uap15:DependencyTarget>true</> festlegen (siehe uap15:DependencyTarget). Der Zweck von <uap15::DependencyTarget> besteht also darin, eine dynamische Abhängigkeit für ein Hauptpaket zu aktivieren. Anders ausgedrückt: Das Hauptpaket muss zulassen, dass es als dynamische Abhängigkeit verwendet wird (während Framework-Pakete dies immer implizit zulassen).

Verweisen auf ein Windows App SDK-Frameworkpaket (Einschränkung des Windows App SDK)

In einer entpackten App können Sie die API für dynamische Abhängigkeiten des Windows App SDK nicht verwenden, um auf das Windows App SDK-Frameworkpaket zu verweisen (wie es bei anderen MSIX-Paketen möglich ist). Stattdessen müssen Sie die Bootstrapper-API verwenden, die vom Windows App SDK bereitgestellt wird. Die Bootstrapper-API ist eine spezielle Form der API für dynamische Abhängigkeiten, die für die Übernahme von Abhängigkeiten vom Windows App SDK-Frameworkpaket entwickelt wurde. Weitere Informationen finden Sie unter Verwenden der Windows App SDK-Runtime für gepackte Apps mit externem Speicherort oder nicht gepackte Apps.

Die API für dynamische Abhängigkeiten von Windows 11 hat diese Einschränkung nicht.