Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit App-Erweiterungen kann Ihre App Add-In-Inhalte und -Funktionen aus anderen Paketen einbinden. Dies ist das Windows Äquivalent eines Plug-In-Modells. Ein Erweiterungsanbieter deklariert Inhalte oder Dienste, und Ihre Host-App erkennt und lädt sie zur Laufzeit.
Important
App-Erweiterungen erfordern MSIX-Paketidentität sowohl für host- als auch für Erweiterungs-Apps. Die Erweiterungen werden über den Paketkatalog ermittelt.
Funktionsweise von App-Erweiterungen
Das App-Erweiterungsmodell hat zwei Rollen:
- Erweiterungshost – Ihre App deklariert, welche Erweiterungstypen sie akzeptiert, und ermittelt installierte Erweiterungen.
- Erweiterungsanbieter – Eine andere App (oder dieselbe App) deklariert, dass sie eine Erweiterung eines bestimmten Typs bereitstellt.
Erweiterungen kommunizieren über die Paketmanifestdeklarationen, nicht über Code. Die Host-App verwendet die AppExtensionCatalog-API , um installierte Erweiterungen zu suchen und zu verwalten.
Deklarieren eines Erweiterungshosts
Fügen Sie der App AppExtensionHosteine Package.appxmanifest Deklaration hinzu:
<Package xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" ...>
<Applications>
<Application ...>
<Extensions>
<uap3:Extension Category="windows.appExtensionHost">
<uap3:AppExtensionHost>
<uap3:Name>com.example.myapp.extensions</uap3:Name>
</uap3:AppExtensionHost>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
</Package>
Deklarieren eines Erweiterungsanbieters
In der Erweiterungs-App Package.appxmanifest:
<Package xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" ...>
<Applications>
<Application ...>
<Extensions>
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension Name="com.example.myapp.extensions"
Id="MathExtension"
DisplayName="Math Functions"
Description="Provides math operations"
PublicFolder="Public">
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
</Package>
PublicFolder verweist auf einen Ordner im Erweiterungspaket, den die Host-App lesen kann.
Entdecken und Laden von Erweiterungen
Verwenden Sie AppExtensionCatalog in Ihrer Host-App, um installierte Erweiterungen zu ermitteln:
private AppExtensionCatalog? _catalog;
private async Task InitializeExtensionsAsync()
{
_catalog = AppExtensionCatalog.Open("com.example.myapp.extensions");
_catalog.PackageInstalled += OnExtensionInstalled;
_catalog.PackageUpdated += OnExtensionUpdated;
_catalog.PackageUninstalling += OnExtensionRemoved;
var extensions = await _catalog.FindAllAsync();
foreach (var extension in extensions)
{
await LoadExtensionAsync(extension);
}
}
private async Task LoadExtensionAsync(AppExtension extension)
{
string extensionId = extension.Id;
string displayName = extension.DisplayName;
// Get the extension's public folder
var folder = await extension.GetPublicFolderAsync();
if (folder != null)
{
// Read configuration, content, or scripts from the folder
var configFile = await folder.TryGetItemAsync("config.json");
if (configFile != null)
{
// Parse and use the extension configuration
}
}
}
// See "Handle extension lifecycle events" below for the
// OnExtensionInstalled, OnExtensionUpdated, and OnExtensionRemoved handlers.
private async void OnExtensionInstalled(AppExtensionCatalog sender,
AppExtensionPackageInstalledEventArgs args) { }
private async void OnExtensionUpdated(AppExtensionCatalog sender,
AppExtensionPackageUpdatedEventArgs args) { }
private void OnExtensionRemoved(AppExtensionCatalog sender,
AppExtensionPackageUninstallingEventArgs args) { }
Lebenszyklusereignisse von Erweiterungen verwalten
private async Task LoadExtensionAsync(AppExtension extension) => await Task.CompletedTask;
// (See "Discover and load extensions" above for the real implementation.)
private async void OnExtensionInstalled(AppExtensionCatalog sender,
AppExtensionPackageInstalledEventArgs args)
{
// Re-query the catalog to get the AppExtension instances added by this package
var extensions = await sender.FindAllAsync();
foreach (var extension in extensions.Where(e => e.Package.Id.FamilyName == args.Package.Id.FamilyName))
{
await LoadExtensionAsync(extension);
}
}
private void OnExtensionRemoved(AppExtensionCatalog sender,
AppExtensionPackageUninstallingEventArgs args)
{
// args.Package identifies the package that is uninstalling
string familyName = args.Package.Id.FamilyName;
// Remove any extensions from that package from your app
}
private async void OnExtensionUpdated(AppExtensionCatalog sender,
AppExtensionPackageUpdatedEventArgs args)
{
// Re-query the catalog to get the refreshed AppExtension instances
var extensions = await sender.FindAllAsync();
foreach (var extension in extensions.Where(e => e.Package.Id.FamilyName == args.Package.Id.FamilyName))
{
// Reload with updated content
await LoadExtensionAsync(extension);
}
}
Verwandte Inhalte
Windows developer