Paquetes de recursos

Los paquetes de recursos ofrecen una excelente manera de reducir la superficie de disco de los usuarios mediante la segmentación del lenguaje o el escalado de activos específicos en paquetes independientes que Windows descarga automáticamente en función de la configuración del equipo de los usuarios. Si el usuario agrega un nuevo idioma a su lista de idiomas del sistema operativo en la configuración Región e Idioma o bien cambia la configuración de visualización, en una actualización automática del almacén, el sistema operativo capturará los paquetes de recursos aplicables para todas las aplicaciones instaladas en el dispositivo.

En Windows SDK 10.0.17095.0, la API AddResourcePackageAsync permite a los desarrolladores instalar un paquete de recursos para una aplicación a petición.

Instrucciones para usar la API AddResourcePackageAsync

  • AddResourcePackageAsync toma el elemento PackageFamilyName de la aplicación y el Id. de recurso que identifica de forma única el paquete de recursos que intenta descargar. El Id. de recurso corresponde al elemento ResourceId en el archivo AppxManifest.xml del paquete de recursos.

  • Para obtener una vista combinada de todos los recursos que están disponibles para la aplicación, esta debe reiniciarse. La API ofrece la opción ForceTargetApplicationShutdown, que puede pasar para reiniciar la aplicación.

  • Si hay una actualización disponible para la aplicación cuando se descarga el paquete de recursos, se producirá un error en la API, ya que la versión anterior de la aplicación ya no está disponible. Al pasar la marca ApplyUpdateIfAvailable, la API actualizará la aplicación y obtendrá el paquete de recursos solicitado como parte de la misma descarga.

  • La API devuelve el progreso de la descarga que puede mostrarse en la aplicación. Tenga en cuenta también que, para las aplicaciones publicadas en la Store, la adquisición del paquete de recursos se muestra en la página de descargas y actualizaciones de Microsoft Store y lo hace como una actualización de la aplicación. El usuario final puede optar por pausar o cancelar la descarga del paquete de recursos de Microsoft Store.

Ejemplo

 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

Para la validación local, los desarrolladores pueden crear un archivo .msixbundle o .appxbundle y realizar la instalación desde la unidad local, el recurso compartido de red o el servidor web. Cuando la aplicación llama a la API AddResourcePackageAsync, Windows adquirirá el paquete de recursos desde la ubicación donde se instaló la aplicación original. Esto simplifica la validación. Una vez que esto funciona, la aplicación está lista para implementarse.

Eliminación de paquetes de recursos

La aplicación puede optar por quitar los paquetes de recursos que ha descargado mediante la API RemoveResourcePackageAsync. Pero los paquetes de recursos que son aplicables para el usuario o el dispositivo como un conjunto no se pueden desinstalar.

Ejemplo

 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
    }
}