will visual users tutorial the studio publicacion one how ejemplos create application c# .net clickonce

c# - visual - ¿Dónde puedo almacenar de forma segura los archivos de datos para una implementación de ClickOnce?



one clickonce (3)

He estado usando ApplicationDeployment.CurrentDeployment.DataDirectory para almacenar el contenido descargado por el cliente en el tiempo de ejecución que se espera que esté allí cada vez que se inicie la aplicación, sin embargo, ahora he encontrado estos cambios de forma aleatoria si la aplicación se actualiza.

¿Cuál es el mejor método confiable para almacenar datos de usuario para la aplicación en implementaciones de un solo clic?

Actualmente he estado usando el siguiente método

private const string LocalPath = "data"; public string GetStoragePath() { string dir; if (ApplicationDeployment.IsNetworkDeployed) { ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; dir = Path.Combine(ad.DataDirectory, LocalPath); } else { dir = LocalPath; } return CreateDirectory(dir); }

Originalmente seguí el artículo Acceso a datos locales y remotos en aplicaciones ClickOnce bajo el encabezado ClickOnce Data Directory que indica que esta es la ruta recomendada.

NOTA : CreateDirectory(string) simplemente crea un directorio si aún no existe.

He encontrado que la causa raíz de mi problema es que estoy creando muchos archivos y un archivo de índice, este archivo de índice contiene rutas absolutas, al hacer clic una vez se mueve el contenido (o las copias) en una actualización, por lo que ya no existen las rutas absolutas. Investigaré el almacenamiento aislado, ya que Damokles sugiere ver si esto tiene el mismo efecto secundario para las implementaciones de un solo clic.


Depende de los datos que estés guardando.

Actualmente está guardando en el Directorio de datos que está bien. Lo que debe tener en cuenta es que cada versión de la aplicación tiene su propio Directorio de datos. Al actualizar, ClickOnce copia todos los datos de la versión anterior a la nueva versión cuando se inicia la aplicación. Esto le da un gancho para migrar cualquiera de los datos de una versión a la siguiente. Esto es bueno para bases de datos de memoria como Sql Lite o SQL CE.

Una cosa que he visto es que cuando tiene una gran cantidad de datos (4 gigas) si los almacena en el Directorio de datos, estos datos se copiarán de la versión anterior a la nueva. Esto ralentizará el tiempo de inicio después de una actualización. Si tiene una gran cantidad de datos o no quiere preocuparse por la migración de datos, puede almacenar los datos en la carpeta local de los usuarios siempre que tenga plena confianza o puede usar almacenamiento aislado si tiene una confianza parcial.

Almacenamiento aislado

Datos de aplicación de usuario local


Echa un vistazo a IsolatedStorage esto debería ayudar. Incluso funciona en entornos de confianza parcial.

Para mantener sus datos necesita usar la aplicación con el objeto IsolatedStorage

using System.IO; using System.IO.IsolatedStorage; ... IsolatedStorageFile appScope = IsolatedStorageFile.GetUserStoreForApplication(); using(IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.dat", FileMode.OpenOrCreate, appScope)) { ...

código tomado de esta publicación


Otra opción es crear un directorio para su aplicación en la carpeta AppData del usuario y almacenarlo allí. Puedes conseguir un camino para eso con esto:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Encontrarás que muchas aplicaciones usan eso (y es equivalente local). Tampoco se mueve entre las versiones de ClickOnce.