Domanda

L'applicazione Winform è rilasciata con ClickOnce nella nostra Intranet. Memorizziamo le preferenze personali per la GUI nell'archivio isolato. Tutto funziona abbastanza bene :)

Il problema è che quando abbiamo una nuova versione dell'applicazione, pubblichiamo ... tutte le preferenze sono perse! L'utente deve impostare le proprie preferenze più volte su ogni versione.

Esiste un modo per bloccare l'isolamento per l'intera applicazione anziché per la versione?

È stato utile?

Soluzione

Devi utilizzare applicazione con ambito, anziché dominio con spazio di archiviazione isolato. Questo può essere fatto usando uno dei costruttori sovraccaricati di IsolatedStorageFileStream .

Esempio:

using System.IO;
using System.IO.IsolatedStorage;
...

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

Tuttavia, ora ti imbatterai nel problema di questo codice che funziona solo quando l'applicazione è stata avviata tramite ClickOnce perché è l'unica volta in cui è disponibile l'archiviazione isolata con ambito applicazione. Se non si avvia tramite ClickOnce (ad esempio tramite Visual Studio), GetUserStoreForApplication () genererà un'eccezione.

Il modo per aggirare questo problema è assicurarsi che AppDomain.CurrentDomain.ActivationContext non sia null prima di provare a utilizzare l'archiviazione isolata con ambito applicazione.

Altri suggerimenti

Stavo lavorando su un'app ClickOnce qualche tempo fa e ho usato Environment.GetFolderPath (ApplicationData) - ad es. cartella dati app in roaming, per memorizzare tutte le impostazioni. Funzionava bene e sopravvisse a numerosi aggiornamenti. Basta creare una sottodirectory con il nome della tua app o CompanyName / AppName o qualsiasi altra cosa e archiviare tutto lì.

un riassunto delle altre risposte:

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

Devi archiviare una versione permanente delle impostazioni utente in un archivio più durevole come il database. L'applicazione può decidere di utilizzare l'archiviazione isolata, se disponibile. Se non è disponibile (a causa di una versione più recente), l'app dovrebbe ottenere le impostazioni dal database e utilizzarlo per reinizializzare le impostazioni in un archivio isolato. Se le impostazioni vengono modificate, è necessario aggiornare entrambe le posizioni. A meno che non esista una versione più recente dell'app, l'app non dovrebbe avere le impostazioni da DB.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top