Frage

Die Winform Anwendung ist Release mit Clickonce in unserem Intranet. Wir speichern persönliche Präferenz für die GUI im Isolated Storage. Alle funktionieren ziemlich gut:)

Das Problem ist, wenn wir eine neue Version der Anwendung haben wir veröffentlichen ... alle Einstellungen verloren! Benutzer müssen die Einrichtung ihre Präferenz über und über jede Version.

Gibt es eine Möglichkeit, die Isolierung für die gesamte Anwendung anstelle der Version einzufrieren?

War es hilfreich?

Lösung

Sie müssen verwenden Anwendung scoped, anstatt Domäne scoped, isolierten Speicher. Dies kann unter Verwendung eines von IsolatedStorageFileStream des ladenen Konstruktoren erfolgen.

Beispiel:

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

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

Aber jetzt werden Sie in die Ausgabe dieses Codes laufen nur arbeiten, wenn die Anwendung über Clickonce ins Leben gerufen wurde, weil das die einzige Zeitanwendung ist scoped isolierter Speicher zur Verfügung steht. Sollten Sie nicht über Clickonce (wie durch Visual Studio) starten, GetUserStoreForApplication () wird eine Ausnahme werfen.

Die Art und Weise um das Problem ist, um sicherzustellen, dass AppDomain.CurrentDomain.ActivationContext ist nicht null, bevor Sie versuchen Anwendung scoped isolierte Speicher zu verwenden.

Andere Tipps

Ich war auf einer Clickonce-Arbeits App eine Weile her und verwendet Environment.GetFolderPath (Anwendungsdaten) - z.B. App-Daten-Ordner Roaming, alle Einstellungen zu speichern. Hat gut funktioniert und überlebte zahlreiche Updates. Erstellen Sie einfach eine subdireectory mit dem Namen der App oder Company / AppName oder was auch immer und speichern alles drin.

eine Zusammenfassung von den anderen Antworten:

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

Sie haben eine permanente Version von Benutzereinstellungen in einem haltbareren Speicher wie Datenbank zu speichern. Ihre Anwendung kann entscheiden, den isolierten Speicher zu verwenden, wenn es verfügbar ist. Wenn es nicht verfügbar (wegen einer neueren Version) ist, sollte die App, die Einstellungen aus der Datenbank erhalten und es verwendet, um die Einstellungen in isolierten Speichern neu zu initialisieren. Falls Einstellungen geändert werden, sollten Sie beide Orte aktualisieren. Es sei denn, es eine neuere Version der App ist, sollten Sie Ihre App nicht die Einstellungen von DB bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top