Silverlight 4 Beta – Confianza Elevada: Acceso al Sistema de Archivos
Posted on : 08-01-2010 | By : Rodrigo | In : Silverlight 4
Tags: Confianza Elevada, Silverlight 4, SpecialFolder
6
En un artículo anterior detallamos el nuevo modelo de Confianza en las aplicaciones de Silverlight 4: la Confianza Elevada. En este artículo usaremos este modo para poder acceder al sistema de archivos de la máquina del usuario sin necesidad de utilizar las cajas de diálogo OpenFileDialog o SaveFileDialog.
El proyecto
Para demostrar el acceso al sistema de archivos de la máquina del usuario crearemos una sencilla aplicación que muestre las imágenes de la carpeta “Mis Imágenes” en una lista y al hacer clic sobre cada una mostrar la imagen seleccionada.
Iniciaremos creando un nuevo proyecto de Silverlight 4 en Visual Studio .NET 2010 y lo nombraremos Demo.SL4.ConfianzaElevada.SistemaArchivos aceptando la opción predeterminada de crear un proyecto Web para probar la aplicación de Silverlight.
Además, necesitaremos configurar la aplicación para permitir la instalación Afuera del Navegador y será en la misma caja de diálogo de configuración en donde deberemos establecer el nivel de Confianza Elevada. En el artículo anterior detallamos cómo hacer esto.
Enumerador SpecialFolder
Una vez instalada la aplicación en la máquina del usuario la clave será obtener la ruta en donde está la carpeta “Mis Imágenes”. Esto es debido a que en la versión de Silverlight 4 Beta (la última versión al momento de crear este artículo) únicamente tendremos acceso a las carpetas del perfil del usuario (las carpetas Mi *) sin necesidad de las cajas de diálogo. En vez de establecer la ruta de manera manual que potencialmente podría variar entre diferentes equipos y obviamente entre diferentes plataformas también es buena idea utilizar el enumerador SpecialFolder, quien nos regresará la ruta física según el valor seleccionado. A continuación se muestra el código relacionado al evento Loaded de la aplicación en donde usamos el enumerador SpecialFolder en conjunto con el método GetFolderPath() de la clase Environment:
{
//Checamos si está ejecutando en Confianza Elevada
if (Application.Current.HasElevatedPermissions)
{
//Obtiene la ruta a la carpeta "Mis Imágenes"
string myPicturesPath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
//Establece como fuente de datos la lista de archivos en la carpeta
//siempre y cuando sean JPG o PNG
pictureList.ItemsSource =
System.IO.Directory.EnumerateFiles(myPicturesPath).Where(f => f.EndsWith(".jpg") || f.EndsWith(".png"));
}
}
Es muy importante destacar la propiedad HasElevatedPermissions de la clase Application ya que esta propiedad nos indica ultimadamente si la aplicación está ejecutando en Confianza Elevada o no. Por tal motivo será buena idea encerrar la ejecución de código en el bloque if{}.
Si bien las únicas carpetas a las que tenemos acceso sin necesidad de utilizar OpenFileDialog y SaveFileDialog son aquellas del perfil del usuario, a través de las cajas de diálogo podemos seguir teniendo acceso a cualquier carpeta que el usuario indique. Incluso, en Confianza Elevada podemos obtener más información acerca de los archivos seleccionados a través de estas cajas de diálogo, por ejemplo, la ruta física completa del archivo en cuestión
El resultado de la aplicación es el siguiente:
Resumen
Las aplicaciones que ejecutan en Confianza Elevada tienen más funcionalidad, como por ejemplo el acceso al sistema de archivos de la máquina del usuario.
Sin usar las cajas de diálogo tradicionales OpenFileDialog y SaveFileDialog podemos acceder a las carpetas del perfil del usuario: Mis Imágenes, Mis Videos, Mi Música y Mis Documentos y potencialmente leer los archivos y su información relacionada.
Puedes descargar el código aquí
Puedes ver la demo en vivo aquí (requiere Silverlight 4 y ejecutar la aplicación Fuera del Navegador)






