Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La mayoría de las aplicaciones consumen o generan datos. ClickOnce le ofrece una variedad de opciones para leer y escribir datos, tanto de forma local como remota.
Datos locales
Con ClickOnce, puede cargar y almacenar datos localmente mediante cualquiera de los métodos siguientes:
Directorio de datos ClickOnce
Almacenamiento aislado
Otros archivos locales
Directorio de datos ClickOnce
Cada aplicación ClickOnce instalada en un equipo local tiene un directorio de datos, almacenado en la carpeta Documentos y configuración del usuario. Cualquier archivo incluido en una aplicación ClickOnce y marcado como un archivo "data" se copia en este directorio cuando se instala una aplicación. Los archivos de datos pueden ser de cualquier tipo de archivo, el que se usa con más frecuencia como texto, XML y archivos de base de datos, como Microsoft Access .mdb archivos.
El directorio de datos está diseñado para los datos administrados por la aplicación, que es los datos que la aplicación almacena y mantiene explícitamente. Todos los archivos estáticos y no de dependencia no marcados como "datos" en el manifiesto de aplicación residirán en el Directorio de Aplicaciones. Este directorio es donde residen los archivos y ensamblados ejecutables de la aplicación (.exe).
Nota:
Cuando se desinstala una aplicación ClickOnce, también se quita su directorio de datos. Nunca use el directorio de datos para almacenar datos administrados por el usuario final, como documentos.
Marcar archivos de datos en una distribución ClickOnce
Para colocar un archivo existente dentro del directorio de datos, debe marcar el archivo existente como un archivo de datos en el archivo de manifiesto de aplicación de la aplicación ClickOnce. Para obtener más información, vea Cómo: Incluir un archivo de datos en una aplicación ClickOnce.
Lectura y escritura en el directorio de datos
La lectura desde el directorio de datos requiere que la aplicación ClickOnce solicite permiso de lectura; de forma similar, la escritura en el directorio requiere permiso de escritura. La aplicación tendrá automáticamente este permiso si está configurado para ejecutarse con plena confianza. Para obtener más información sobre cómo elevar los permisos de la aplicación mediante la elevación de permisos o la implementación de aplicaciones de confianza, consulte Aplicaciones ClickOnce seguras.
Nota:
Si su organización no usa la implementación de aplicaciones de confianza y ha desactivado la elevación de permisos, se producirá un error en la aserción de permisos.
Una vez que la aplicación tenga estos permisos, puede acceder al directorio de datos mediante llamadas de método en las clases dentro de System.IO. Puede obtener la ruta de acceso del directorio de datos dentro de una aplicación ClickOnce de Windows Forms mediante la DataDirectory propiedad definida en la CurrentDeployment propiedad de ApplicationDeployment. Esta es la forma más cómoda y recomendada de acceder a los datos. En el ejemplo de código siguiente se muestra cómo hacerlo para un archivo de texto denominado CSV.txt que ha incluido en la implementación como un archivo de datos.
Nota:
La ApplicationDeployment clase y las API del System.Deployment.Application espacio de nombres no se admiten en .NET Core y .NET 5 ni en versiones posteriores. En .NET 7, se admite un nuevo método de acceso a las propiedades de implementación de aplicaciones. Para obtener más información, consulte Access ClickOnce deployment properties in .NET (Acceso a las propiedades de implementación de ClickOnce en .NET). .NET 7 no admite el equivalente de los métodos ApplicationDeployment.
if (ApplicationDeployment.IsNetworkDeployed)
{
try
{
using (StreamReader sr = new StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\CSV.txt"))
{
MessageBox.Show(sr.ReadToEnd());
}
}
catch (Exception ex)
{
MessageBox.Show("Could not read file. Error message: " + ex.Message);
}
}
Para obtener más información sobre cómo marcar archivos en la implementación como archivos de datos, vea Cómo: Incluir un archivo de datos en una aplicación ClickOnce.
También puede obtener la ruta de acceso del directorio de datos mediante las variables pertinentes de la Application clase , como LocalUserAppDataPath.
La manipulación de otros tipos de archivos podría requerir permisos adicionales. Por ejemplo, si desea usar un archivo de base de datos de Access (.mdb), la aplicación debe declarar plena confianza para usar las clases xref:System.Data< pertinentes>.
Directorio de datos y versiones de la aplicación
Cada versión de una aplicación tiene su propio directorio de datos, que está aislado de otras versiones. ClickOnce crea este directorio independientemente de si se incluyen archivos de datos en la implementación para que la aplicación tenga una ubicación para crear nuevos archivos de datos en tiempo de ejecución. Cuando se instala una nueva versión de una aplicación, ClickOnce copiará todos los archivos de datos existentes del directorio de datos de la versión anterior en el directorio de datos de la nueva versión, independientemente de si se incluyeron en la implementación original o crearon la aplicación.
ClickOnce reemplazará la versión anterior del archivo por la versión más reciente del servidor si un archivo de datos tiene un valor hash diferente en la versión anterior de la aplicación como en la nueva versión. Además, si la versión anterior de la aplicación creó un nuevo archivo que tiene el mismo nombre que un archivo incluido en la implementación de la nueva versión, ClickOnce sobrescribirá el archivo de la versión anterior con el nuevo archivo. En ambos casos, los archivos antiguos se incluirán en un subdirectorio dentro del directorio de datos denominado .pre
, para que la aplicación pueda seguir teniendo acceso a los datos antiguos con fines de migración.
Si necesita una migración más detallada de los datos, puede usar la API de implementación clickOnce para realizar la migración personalizada desde el directorio de datos antiguo al nuevo directorio de datos. Tendrá que probar una descarga disponible mediante IsFirstRun, descargar la actualización mediante Update o UpdateAsyncy realizar cualquier trabajo de migración de datos personalizado en el suyo propio una vez finalizada la actualización.
Almacenamiento aislado
El almacenamiento aislado proporciona una API para crear y acceder a archivos mediante una API sencilla. La ubicación real de los archivos almacenados está oculta tanto del desarrollador como del usuario.
El almacenamiento aislado funciona en todas las versiones de .NET Framework. El almacenamiento aislado también funciona en aplicaciones de confianza parcial sin necesidad de concesiones de permisos adicionales. Debe usar Almacenamiento aislado si la aplicación debe ejecutarse en confianza parcial, pero debe mantener datos específicos de la aplicación.
Nota:
En ClickOnce para .NET Core y .NET 5 o posterior, no se admite la confianza parcial, que requiere seguridad de acceso al código. En .NET Framework, el uso de seguridad de acceso a código no es un procedimiento recomendado y no se recomienda.
Para obtener más información, consulte Almacenamiento aislado.
Otros archivos locales
Si la aplicación debe trabajar con datos de usuario final o guardarlos, como informes, imágenes, música, etc., la aplicación necesitará FileIOPermission leer y escribir datos en el sistema de archivos local.
Datos remotos
En algún momento, es probable que la aplicación tenga que recuperar información de un sitio web remoto, como datos de cliente o información de mercado. En esta sección se describen las técnicas más comunes para recuperar datos remotos.
Acceso a archivos con HTTP
Puede acceder a los datos desde un servidor web utilizando ya sea la WebClient o la HttpWebRequest clase en el espacio de nombres System.Net. Los datos pueden ser archivos estáticos o ASP.NET aplicaciones que devuelven texto sin formato o datos XML. Si los datos están en formato XML, la forma más rápida de recuperar los datos es mediante la XmlDocument clase , cuyo Load método toma una dirección URL como argumento. Para obtener un ejemplo, vea Leer un documento XML en dom.
Debe tener en cuenta la seguridad cuando la aplicación accede a datos remotos a través de HTTP. De forma predeterminada, el acceso de la aplicación ClickOnce a los recursos de red puede estar restringido, en función de cómo se implementó la aplicación. Estas restricciones se aplican para evitar que los programas malintencionados obtengan acceso a datos remotos con privilegios o usen el equipo de un usuario para atacar a otros equipos de la red.
En la tabla siguiente se enumeran las estrategias de implementación que puede usar y sus permisos web predeterminados.
Tipo de implementación | Permisos de red predeterminados |
---|---|
Instalación web | Solo puede acceder al servidor web desde el que se instaló la aplicación. |
Instalación de compartición de archivos | No se puede acceder a ningún servidor web |
Instalar CD-ROM | Puede acceder a cualquier servidor web |
Si la aplicación ClickOnce no puede acceder a un servidor web debido a restricciones de seguridad, la aplicación debe declarar WebPermission para ese sitio web. Para obtener más información sobre cómo aumentar los permisos de seguridad para una aplicación ClickOnce, consulte Protección de aplicaciones ClickOnce.
Acceso a datos a través de un servicio web XML
Si expone los datos como un servicio web XML, puede acceder a los datos mediante un proxy de servicio web XML. El proxy es una clase de .NET Framework que se crea mediante Visual Studio. Las operaciones del servicio web XML, como recuperar clientes, realizar pedidos, etc., se exponen como métodos en el proxy. Esto hace que los servicios web sean mucho más fáciles de usar que los archivos XML o texto sin formato.
Si el servicio web XML funciona a través de HTTP, el servicio estará sujeto a las mismas restricciones de seguridad que las clases WebClient y HttpWebRequest.
Acceso directo a una base de datos
Puede usar las clases dentro del System.Data espacio de nombres para establecer conexiones directas con un servidor de bases de datos como SQL Server en la red, pero debe tener en cuenta los problemas de seguridad. A diferencia de las solicitudes HTTP, las solicitudes de conexión de base de datos siempre están prohibidas de forma predeterminada bajo confianza parcial; Solo tendrá dicho permiso de forma predeterminada si instala la aplicación ClickOnce desde una CD-ROM. Esto proporciona a la aplicación plena confianza. Para habilitar el acceso a una base de datos específica de SQL Server, la aplicación debe solicitarla SqlClientPermission ; para habilitar el acceso a una base de datos distinta de SQL Server, debe solicitar OleDbPermission.
La mayoría de las veces, no tendrá que acceder a la base de datos directamente, sino a través de una aplicación de servidor Web escrita en ASP.NET o un servicio Web XML. El acceso a la base de datos de esta manera suele ser el mejor método si la aplicación ClickOnce se implementa desde un servidor web. Puede acceder al servidor en confianza parcial sin elevar los permisos de la aplicación.