Paquetes de recursos

Los paquetes de recursos ofrecen una excelente manera de reducir la superficie del disco de los usuarios segmentando el idioma o escalando un recurso específico en paquetes independientes que se descargan automáticamente Windows según la configuración de la máquina de los usuarios. Si el usuario agrega un nuevo idioma a su lista de idiomas del sistema operativo en Configuración de idioma de región o cambia la configuración de pantalla, a través de una actualización automática de la tienda, el sistema operativo capturará los paquetes de recursos aplicables para todas las aplicaciones instaladas en el dispositivo.

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

Uso de la API AddResourcePackageAsync

  • AddResourcePackageAsync toma el PackageFamilyName de la aplicación y el identificador de recurso que identifica de forma única el paquete de recursos que está intentando descargar. El identificador de recurso corresponde al elemento ResourceId del AppxManifest.xml del paquete de recursos.

  • La aplicación debe reiniciarse para obtener una vista combinada de todos los recursos que están disponibles para la aplicación. La API ofrece la opción ForceTargetApplicationShutdown que se 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 recibirá el paquete de recursos solicitado como parte de la misma descarga.

  • La API devuelve un progreso para la descarga que se puede mostrar en la aplicación. Tenga en cuenta también que, en el caso de las aplicaciones publicadas en la tienda, la adquisición del paquete de recursos aparece en la página de descargas y actualizaciones de Microsoft Store y se muestra como una actualización de la aplicación. El usuario final puede optar por pausar o cancelar la descarga del paquete de recursos desde el 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
        }
}

Validación

Para la validación local, los desarrolladores pueden crear un archivo .msixbundle o .appxbundle e instalarlo 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 para quitar los paquetes de recursos que descargó a través de la API RemoveResourcePackageAsync. Sin embargo, los paquetes de recursos que son aplicables al usuario o al dispositivo en su 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
    }
}