2008-10-14 16 views
9

L'application Winform est disponible avec ClickOnce dans notre intranet. Nous stockons les préférences personnelles pour l'interface graphique dans le stockage isolé. Tout fonctionne très bien :)ClickOnce et IsolatedStorage

Le problème est lorsque nous avons une nouvelle version de l'application, nous publions ... toutes les préférences sont perdues! L'utilisateur doit configurer sa préférence pour chaque version.

Existe-t-il un moyen de geler l'isolation pour l'ensemble de l'application au lieu de la version?

Répondre

17

Vous devez utiliser l'application scope, plutôt que domaine SCOPED, stockage isolé. Cela peut être fait en utilisant l'un des constructeurs surchargés IsolatedStorageFileStream.

Exemple:

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

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

Cependant, maintenant vous courrez dans la question de ce code ne travaille lorsque l'application a été lancée via ClickOnce parce que c'est la seule application de temps scope stockage isolé est disponible. Si vous ne lancez pas via ClickOnce (par exemple, via Visual Studio), GetUserStoreForApplication() lèvera une exception.

Le moyen de contourner ce problème est de se assurer AppDomain.CurrentDomain.ActivationContext n'est pas nul avant d'utiliser l'application scope stockage isolé.

+0

Je vais essayer cela. Semble être la meilleure réponse pour le moment. –

+0

Je cours à l'intérieur de VS et il ne soulève aucune erreur. J'accepte ta réponse sans la tester encore avec le vrai déploiement. Je vais écrire ici si ça ne marche pas. Thx –

+3

ou vous pouvez utiliser * System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed * pour savoir si l'application a été déployée avec ClickOnce et vous pouvez utiliser GetUserStoreForApplication() – bithavoc

1

Vous devez stocker une version permanente des paramètres utilisateur dans une base de données de stockage plus durable. Votre application peut décider d'utiliser le stockage isolé s'il est disponible. S'il n'est pas disponible (en raison d'une version plus récente), l'application doit récupérer les paramètres de la base de données et les utiliser pour réinitialiser les paramètres dans un stockage isolé. Si les paramètres sont modifiés, vous devez mettre à jour les deux emplacements. À moins qu'il n'y ait une version plus récente de l'application, votre application ne devrait pas avoir à obtenir les paramètres de DB.

+0

C'était mi idée initiale, mais j'était intéressant de savoir si elles étaient un travail autour: P –

+0

Vous pouvez enregistrer le fichier de paramètres dans un emplacement spécifique sur la disque dur de l'utilisateur, mais vous devrez faire l'application pleine confiance .. –

4

Je travaillais sur une application ClickOnce il y a un certain temps et j'ai utilisé Environment.GetFolderPath (ApplicationData) - par exemple. dossier de données de l'application itinérante, pour stocker tous les paramètres. A travaillé bien et a survécu à de nombreuses mises à jour. Il suffit de créer un sous-répertoire avec le nom de votre application ou CompanyName/AppName ou quoi que ce soit et de stocker tout ce qu'il y a dedans.

0

un résumé des autres réponses:

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