c# - ClickOnce y IsolatedStorage
winforms .net-2.0 (3)
La aplicación Winform se lanza con ClickOnce en nuestra Intranet. Almacenamos preferencias personales para la GUI en el Almacenamiento Aislado. Todo funciona bastante bien :)
El problema es cuando tenemos una nueva versión de la aplicación, publicamos ... ¡todas las preferencias se pierden! El usuario necesita configurar sus preferencias una y otra vez.
¿Hay alguna forma de congelar el aislamiento para toda la aplicación en lugar de la versión?
Debe almacenar una versión permanente de la configuración del usuario en una tienda más duradera como base de datos. Su aplicación puede decidir utilizar el almacenamiento aislado si está disponible. Si no está disponible (debido a una versión más nueva), la aplicación debe obtener la configuración de la base de datos y usarla para reiniciar la configuración en el almacenamiento aislado. Si se cambian las configuraciones, debe actualizar ambos lugares. A menos que haya una versión más nueva de la aplicación, su aplicación no debería tener que obtener la configuración de DB.
Debe utilizar el ámbito aislado de la aplicación , en lugar del dominio , aislado. Esto se puede hacer utilizando uno de los constructores sobrecargados de IsolatedStorageFileStream .
Ejemplo:
using System.IO;
using System.IO.IsolatedStorage;
...
IsolatedStorageFile appScope = IsolatedStorageFile.GetUserStoreForApplication();
using(IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.dat", FileMode.OpenOrCreate, appScope))
{
...
Sin embargo, ahora se encontrará con el problema de que este código solo funciona cuando la aplicación se ha lanzado a través de ClickOnce porque es la única vez que el almacenamiento aislado con ámbito de aplicación está disponible. Si no inicia mediante ClickOnce (por ejemplo, a través de Visual Studio), GetUserStoreForApplication () emitirá una excepción.
La forma de evitar este problema es asegurarse de que AppDomain.CurrentDomain.ActivationContext no sea nulo antes de tratar de usar el almacenamiento aislado con ámbito de la aplicación.
Estuve trabajando en una aplicación ClickOnce hace un tiempo y usé Environment.GetFolderPath (ApplicationData) - por ejemplo, la carpeta de datos de la aplicación de roaming, para almacenar todas las configuraciones. Funcionó bien y sobrevivió a numerosas actualizaciones. Simplemente cree una subdirectoría con el nombre de su aplicación o CompanyName / AppName o lo que sea y almacene todo allí.