Ressourcenpakete

Ressourcenpakete bieten eine hervorragende Möglichkeit, den Datenträgerbedarf von Benutzern zu reduzieren, indem sie die Sprache segmentieren oder bestimmte Ressourcen in separate Pakete skalieren, die automatisch von Windows abhängig von der Computerkonfiguration des Benutzer heruntergeladen werden. Wenn der Benutzer seiner Liste der Betriebssystemsprachen in & den Spracheinstellungen der Region eine neue Sprache hinzufügt oder die Anzeigekonfiguration ändert, ruft das Betriebssystem über ein automatisches Speicherupdate die anwendbaren Ressourcenpakete für alle installierten Apps auf dem Gerät ab.

In Windows SDK 10.0.17095.0 ermöglicht die AddResourcePackageAsync-API Entwicklern, bei Bedarf ein Ressourcenpaket für eine App zu installieren.

Verwenden der AddResourcePackageAsync-API

  • AddResourcePackageAsync verwendet den PackageFamilyName der Anwendung und die Ressourcen-ID, die das Ressourcenpaket, das heruntergeladen werden soll, eindeutig identifiziert. Die Ressourcen-ID entspricht dem ResourceId-Element imAppxManifest.xmldes Ressourcenpakets.

  • Die Anwendung muss neu gestartet werden, um eine zusammengeführte Ansicht aller Ressourcen zu erhalten, die für die Anwendung verfügbar sind. Die API bietet die Option ForceTargetApplicationShutdown , die übergeben werden kann, um die Anwendung neu zu starten.

  • Wenn beim Herunterladen des Ressourcenpakets ein Update für die Anwendung verfügbar ist, ist die API nicht mehr verfügbar, da die ältere Version der App nicht mehr verfügbar ist. Durch Übergeben des ApplyUpdateIfAvailable-Flags aktualisiert die API die App und bekommt das angeforderte Ressourcenpaket als Teil desselben Downloads.

  • Die API gibt einen Fortschritt für den Download zurück, der in der Anwendung angezeigt werden kann. Beachten Sie auch, dass für Apps, die im Store veröffentlicht werden, die Ressourcenpaketerfassung auf der Seite Microsoft Store Downloads und Updates angezeigt wird und als Update für Ihre Anwendung angezeigt wird. Der Endbenutzer kann den Download des Ressourcenpakets aus dem Programm anhalten oder Microsoft Store.

Beispiel

 private async void DownloadGermanResourcePackage(object sender, RoutedEventArgs e)
{            
    // ResourceId that is unique to the resource package
    string resourceId = "split.language-de";
    // Warn user that application will need to restart.
    // To take update if available pass in the ApplyUpdateIfAvailable flag
    var packageCatalog = PackageCatalog.OpenForCurrentPackage();
    PackageCatalogAddResourcePackageResult result = await packageCatalog.AddResourcePackageAsync("29270depappf.CaffeMacchiato_gah1vdar1nn7a", resourceId, 
        AddResourcePackageOptions.ApplyUpdateIfAvailable | AddResourcePackageOptions.ForceTargetApplicationShutdown)
        .AsTask<PackageCatalogAddResourcePackageResult, PackageInstallProgress>(new Progress
        (progress =>;
        {
                // Draw progress
        }));

        if (result.ExtendedError != null)
        {
                //Display error or retry if needed
        }
}

Überprüfen

Zur lokalen Überprüfung können Entwickler eine MSIXBUNDLE- oder APPXBUNDLE-Datei erstellen und über Ihr lokales Laufwerk, Ihre Netzwerkfreigabe oder Ihren Webserver installieren. Wenn die App die AddResourcePackageAsync-API aufruft, ruft Windows das Ressourcenpaket von dem Speicherort ab, an dem die ursprüngliche Anwendung installiert wurde. Dies vereinfacht die Überprüfung. Sobald dies funktioniert, kann die App bereitgestellt werden.

Entfernen von Ressourcenpaketen

Die App kann entfernen, um die Ressourcenpakete zu entfernen, die sie über die RemoveResourcePackageAsync-API heruntergeladen hat. Ressourcenpakete, die für den Benutzer oder das Gerät als Ganzes gelten, können jedoch nicht deinstalliert werden.

Beispiel

 private async void RemoveResourcePackage(object sender, RoutedEventArgs e)
{            
    var packageCatalog = PackageCatalog.OpenForCurrentPackage();
    List resourcePackagesToRemove = new List();
    resourcePackagesToRemove.Add("split.language-de");
    //Warn user that application will be restarted
    var removePackageResult = await packageCatalog.RemoveResourcePackagesAsync(resourcePackagesToRemove);
    if (removePackageResult.ExtendedError != null)
    {
        // display error
    }
}