ClickOnce și IsolatedStorage

Aplicația Winform este lansată cu ClickOnce în Intranetul nostru. Stocăm preferințele personale pentru GUI în spațiul de stocare izolat. Toate lucrările sunt destul de bine :)

Problema este când avem o nouă versiune a aplicației, publicăm ... toate preferințele sunt pierdute! Utilizatorii trebuie să-și configureze preferințele peste și peste fiecare versiune.

Există o modalitate de a îngheța izolarea pentru întreaga aplicație în locul versiunii?

9

4 răspunsuri

Trebuie să utilizați aplicația în locul domeniului domeniu stocat izolat. Acest lucru se poate face folosind unul dintre constructorii supraîncărcați IsolatedStorageFileStream .

Exemplu:

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

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

Cu toate acestea, acum vă veți confrunta cu problema acestui cod care funcționează numai atunci când aplicația a fost lansată prin intermediul ClickOnce deoarece aceasta este singura dată când este disponibilă o aplicație de stocare izolată pentru scopuri. Dacă nu lansați prin ClickOnce (cum ar fi prin Visual Studio), GetUserStoreForApplication() va arunca o excepție.

Modalitatea în jurul acestei probleme este să vă asigurați că AppDomain.CurrentDomain.ActivationContext nu este nulă înainte de a încerca să utilizați spațiu de stocare izolat cu aplicație.

17
adăugat
orice eșantion de cod sursă complet? proba utilizând variabila "IzolateStorageFileStream fs"?
adăugat autor Kiquenet, sursa
Voi încerca asta. Se pare că este cel mai bun răspuns încă.
adăugat autor Patrick Desjardins, sursa
Mă duc în interiorul VS și nu ridică nici o eroare. Accept răspunsul dvs. fără a încerca încă cu implementarea reală. Voi scrie aici dacă nu merge. Mersi
adăugat autor Patrick Desjardins, sursa
sau puteți utiliza System.Deployment.Application.ApplicationDeployment.IsNetwor & zwnj; kDeployed pentru a afla dacă aplicația a fost implementată cu ClickOnce și puteți utiliza GetUserStoreForApplication ()
adăugat autor bithavoc, sursa

Am lucrat la o aplicație ClickOnce acum ceva timp și am folosit Environment.GetFolderPath (ApplicationData) - de ex. director de date roaming, pentru a stoca toate setările. A lucrat bine și a supraviețuit numeroaselor actualizări. Doar creați o subdirectoră cu numele aplicației sau CompanyName/AppName sau orice și stocați totul acolo.

4
adăugat

Trebuie să stocați o versiune permanentă a setărilor de utilizator într-un magazin mai durabil, cum ar fi baza de date. Aplicația dvs. poate decide să utilizeze spațiul de stocare izolat dacă este disponibil. Dacă nu este disponibil (din cauza unei versiuni mai noi), aplicația ar trebui să obțină setările din baza de date și să o folosească pentru a reinițializa setările în spațiu de stocare izolat. Dacă se modifică setările, ar trebui să actualizați ambele locuri. Cu excepția cazului în care există o versiune mai nouă a aplicației, aplicația nu ar trebui să primească setările din DB.

1
adăugat
Aceasta a fost ideea mea inițială, dar am fost interesant să știu dacă au fost o muncă în jurul valorii de: P
adăugat autor Patrick Desjardins, sursa
Puteți să stocați fișierul de setări într-o anumită locație de pe hard disk-ul utilizatorului, dar va trebui să creați încredere în aplicație.
adăugat autor Gulzar Nazim, sursa

un rezumat al celorlalte răspunsuri:

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