Packages de ressources
Les packages de ressources offrent un excellent moyen de réduire l’empreinte disque des utilisateurs en segmentant le langage ou en mettant à l’échelle une ressource spécifique en packages distincts téléchargés automatiquement par Windows en fonction de la configuration d'ordinateur des utilisateurs. Si l’utilisateur ajoute une nouvelle langue à sa liste de langues de système d’exploitation dans les paramètres Région et langue ou modifie la configuration d’affichage, dans une mise à jour automatique du magasin, le système d’exploitation récupère les packages de ressources applicables pour toutes les applications installées sur l’appareil.
Dans SDK Windows 10.0.17095.0, l'API AddResourcePackageAsync permet aux développeurs d'installer à la demande un package de ressources pour une application.
Comment utiliser l’API AddResourcePackageAsync
AddResourcePackageAsync prend le PackageFamilyName de l'application et l'ID de la ressource qui identifie de manière unique le package de ressources qui tente d'être téléchargé. L’ID de la ressource correspond à l’élément ResourceId dans le AppxManifest.xml du package de ressources.
L’application doit redémarrer pour obtenir une vue fusionnée de toutes les ressources disponibles pour l’application. L’API offre l’option ForceTargetApplicationShutdown qui peut passer pour redémarrer l’application.
S’il existe une mise à jour disponible pour l’application lorsque le package de ressources est téléchargé, l’API échoue car l’ancienne version de l’application n’est plus disponible. En passant l’indicateur ApplyUpdateIfAvailable, l’API met à jour l’application et obtient le package de ressources demandé dans le cadre du même téléchargement.
L’API retourne une progression pour le téléchargement qui peut s’afficher dans l’application. Notez également que pour les applications publiées dans le Store, l’acquisition du package de ressources s’affiche dans la page téléchargements et mises à jour du Microsoft Store et apparaît comme une mise à jour de votre application. L’utilisateur final peut choisir de suspendre ou d’annuler le téléchargement du package de ressources à partir du Microsoft Store.
Exemple
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
}
}
Validation
Pour la validation locale, les développeurs peuvent créer un fichier .msixbundle ou .appxbundle et l’installer à partir de votre lecteur local, du partage réseau ou du serveur web. Lorsque l’application appelle l’API AddResourcePackageAsync, Windows acquiert le package de ressources à partir de l’emplacement où l’application d’origine a été installée. Cela simplifie la validation. Une fois que cela fonctionne, l’application est prête à être déployée.
Suppression de packages de ressources
L’application peut choisir de supprimer le ou les packages de ressources qu’il a téléchargés via l’API RemoveResourcePackageAsync. Toutefois, les packages de ressources applicables à l’utilisateur ou à l’appareil dans son ensemble ne peuvent pas être désinstallés.
Exemple
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
}
}