ClickOnce y IsolatedStorage

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 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 del scope de la 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铆.

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.

un resumen de las otras respuestas:

 IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio if (System.Deployment.Application.ApplicationDeployment.IsNetwor鈥屸媖Deployed) { isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications }