Pregunta

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 que cuando tenemos una nueva versión de la aplicación, publicamos ... ¡se pierden todas las preferencias! El usuario debe configurar sus preferencias una y otra vez en cada versión.

¿Hay alguna forma de congelar el aislamiento de toda la aplicación en lugar de la versión?

¿Fue útil?

Solución

Debe utilizar aplicación con ámbito, en lugar de dominio con ámbito, almacenamiento aislado. Esto se puede hacer usando 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 en el ámbito de la aplicación está disponible. Si no se inicia a través de ClickOnce (como a través de Visual Studio), GetUserStoreForApplication () lanzará una excepción.

La forma de evitar este problema es asegurarse de que AppDomain.CurrentDomain.ActivationContext no sea nulo antes de intentar utilizar el almacenamiento aislado con ámbito de aplicación.

Otros consejos

Hace un tiempo estuve trabajando en una aplicación ClickOnce y usé Environment.GetFolderPath (ApplicationData) - por ejemplo. carpeta de datos de la aplicación de roaming, para almacenar todos los ajustes. Funcionó bien y sobrevivió a numerosas actualizaciones. Simplemente cree un subdireectory con el nombre de su aplicación o CompanyName / AppName o lo que sea y almacene todo lo que contenga.

un resumen de las otras respuestas:

IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio
if (System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed)
{
    isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications
}

Debe almacenar una versión permanente de la configuración del usuario en una base de datos similar a un almacén más duradero. Su aplicación puede decidir utilizar el almacenamiento aislado si está disponible. Si no está disponible (debido a una versión más reciente), la aplicación debería obtener la configuración de la base de datos y utilizarla para reinicializar la configuración en el almacenamiento aislado. Si se cambian los ajustes, 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top