MSIX-Pakettypen

MSIX unterstützt vier Pakettypen: Main, Framework, Resource und Optional. MSIX unterstützt auch Bundle-Pakete, die Verteilungscontainer für ein oder mehrere MSIX-Pakete sind.

Ein Pakettyp definiert eine Kombination aus Bereitstellung, Abhängigkeit, Ausführung und Wartungsverhalten. Einige Verhaltensweisen sind dem Typ inhärent, während eine Manifestdeklaration andere Standardwerte überschreiben kann.

Typ Hauptzweck Manifest- oder Identitätsindikator
Main Primäres Paket für eine Anwendung Keine Deklaration für einen anderen Pakettyp
Framework Freigegebene Bibliotheken, Komponenten oder Laufzeitinhalte <Framework>true</Framework>
Ressource Sprach-, Skalen- oder qualifiziererspezifische Ressourcen <ResourcePackage>true</ResourcePackage>
Optional Zusätzliche Inhalte, die einem Main-Paket zugeordnet sind <uap3:MainPackageDependency>
Bündel Verteilungscontainer für mehrere MSIX-Pakete Bündelmanifest und ein ResourceId Wert von ~

Hauptpakete

Ein Hauptpaket stellt das primäre Paket für eine Anwendung dar. Sie kann Anwendungen, Funktionen, Abhängigkeiten, Erweiterungen und Out-of-Process-Server deklarieren.

Das Manifest enthält keine explizite Main-Package-Markierung. Ein Paket ist ein Hauptpaket, wenn es sich nicht als ein anderer Pakettyp deklariert.

Frameworkpakete

Ein Framework-Paket stellt freigegebene Bibliotheken, Komponenten, Ressourcen oder andere Laufzeitinhalte bereit. Andere Pakete oder Prozesse fügen das Framework-Paket ihrem Paketgraphen hinzu, bevor sie dessen Inhalt laden.

Frameworkpakete unterstützen parallele Versionen, sodass Anwendungen unabhängig auf neuere Versionen umsteigen können. Ein Paket deklariert diesen Typ, indem das Manifestelement Framework auf true gesetzt wird.

Informationen zum Verwenden von Framework-Paketen aus verpackten und entpackten Prozessen finden Sie unter Verwenden der API für dynamische Abhängigkeiten.

Ressourcenpakete

Ein Ressourcenpaket trennt sprach-, anzeigeskalierungs- oder andere qualifikatorspezifische Ressourcen von einem Haupt- oder optionalen Paket. Windows installiert nur die Ressourcenpakete, die für ein Gerät oder einen Benutzer gelten.

Ressourcenpakete lassen die Ausführung standardmäßig nicht zu. Ein Paket kann diese Standardeinstellung mit uap6:AllowExecution überschreiben. Ein Paket deklariert den Ressourcentyp durch Festlegen von ResourcePackage auf true.

Optionale Pakete

Ein optionales Paket enthält zusätzlichen Inhalt für ein bestimmtes Hauptpaket. Beispielsweise kann eine Anwendung herunterladbare Karten, hochauflösende Ressourcen oder optionale Tools in separaten Paketen platzieren.

Im Gegensatz zu einem Framework-Paket ist ein optionales Paket einer Hauptpaketfamilie zugeordnet. Es deklariert diese Beziehung über uap3:MainPackageDependency.

Informationen zum Verfassen und zu Anforderungen für Related Sets finden Sie unter Optionale Pakete und das Verfassen von Related Sets.

Bundle-Pakete

Ein MSIX-Bündel (.msixbundle) enthält mindestens ein MSIX-Paket. Ein Bündel stellt ein Verteilungsartefakt bereit, während Windows nur die Architektur- und Ressourcenpakete installieren kann, die für das Zielgerät gelten.

Alle Pakete in einem Bündel gehören zur gleichen Paketfamilie. Ein Bundle ist ein Container anstelle eines fünften bereitstellungsfähigen Pakettyps.

Identifizieren von Pakettypen im Code

Die Windows.ApplicationModel.Package-Klasse stellt Eigenschaften bereit, die einen Pakettyp identifizieren:

static string GetPackageType(Windows.ApplicationModel.Package package)
{
    if (package.IsBundle)
    {
        return "Bundle";
    }

    if (package.IsFramework)
    {
        return "Framework";
    }

    if (package.IsResourcePackage)
    {
        return "Resource";
    }

    if (package.IsOptional)
    {
        return "Optional";
    }

    return "Main";
}

Identifizieren von Pakettypen mit PowerShell

Gibt standardmäßig Get-AppxPackage Main- und Framework-Pakete zurück. Verwenden Sie -PackageTypeFilter, um andere Typen einzuschließen:

Get-AppxPackage -PackageTypeFilter Main,Framework,Resource,Optional,Bundle |
    Select-Object Name, PackageFullName, IsFramework, IsResourcePackage, IsBundle

Das Ausgabeobjekt stellt keine Eigenschaft IsOptional bereit. Verwenden Sie den Filter, um optionale Pakete einzuschließen, und prüfen Sie deren Manifest- oder Paketbeziehung, wenn Sie sie unterscheiden müssen.