2009-10-04 6 views
1

* Ou: "Où le % #% ¤/suis-je censé stocker mes paramètres?"Application.UserAppDataRegistry et numéro de version

Pourquoi le numéro de version du produit est-il inclus dans la clé de Registre Application.UserAppDataRegistry? Je pense que c'est vraiment énervant. Cela n'encourage-t-il pas simplement les développeurs à conserver le numéro de version 1.0.0 pour toujours, puisque la modification du numéro de version entraînera la perte de tous les paramètres (à moins qu'un effort supplémentaire ne soit fait)?

Si je supprime le numéro de version, il fonctionnera bien sûr "mieux" (comme je le vois), mais le framework crée toujours la clé de registre avec le numéro de version.

Qu'est-ce que je supervise?

Répondre

1

Je pense que c'est ce à quoi IsolatedStorage est destiné. Voici un exemple de code VB:

Public Shared Sub SaveGridLayout(ByVal grd As Infragistics.Win.UltraWinGrid.UltraGrid, ByVal sPrefix As String) 
    Dim isf As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication() 
    Dim userDataFile As IsolatedStorageFileStream = New IsolatedStorageFileStream("ClearTrac" + sPrefix + ".dat", FileMode.Create, isf) 
    grd.DisplayLayout.Save(userDataFile) 
    userDataFile.Flush() 
    userDataFile.Close() 
End Sub 

Si l'utilisation utilisez la GetUserStoreForApplication, ce n'est pas version spécifique.

0

Je suppose que le numéro de version est là pour que les utilisateurs puissent installer deux versions de votre application et les exécuter côte à côte. A part ça, je ne vois pas la raison de perdre toutes les configurations quand un numéro de version a changé.

Personnellement, j'utilise généralement des fichiers de configuration pour conserver les informations de configuration et éviter le registre Windows

+0

Si je vraiment besoin d'un soutien côte à côte, Je préfère faire le travail supplémentaire ALORS au lieu de l'inverse ... :-( Mais vous obtenez le même problème avec Application.UserAppDataPath? Et écrire dans le répertoire d'installation de l'application va causer des problèmes sous Vista ... alors où placez-vous vos fichiers de configuration? –

+0

I p lace les fichiers de configuration dans les fichiers programme dans un dossier nommé d'après mon application. Les développeurs stockent souvent les fichiers de configuration dans leurs répertoires de débogage, de sorte qu'ils peuvent avoir une config différente. Il est conseillé au client de sauvegarder les fichiers du programme de manière à ce que, s'ils souffrent d'un échec de configuration, ils puissent restaurer rapidement avant d'appeler le support technique. –

+1

Je pense que c'est ce dont parlait darbystrom quand il a dit que cela causerait des problèmes sous Vista. Plus précisément, si votre utilisateur ne dispose pas de droits d'administrateur, il ne pourra pas enregistrer sa configuration lorsqu'il exécute votre programme lorsque le fichier de configuration se trouve sous Program Files.Mieux vaut le mettre sous% ALLUSERSPROFILE% si vos configurations sont sur une base par machine ou% LOCALAPPDATA% si elles sont sur une base par utilisateur. Idem pour tous les autres fichiers que votre application modifie lors de l'exécution. – RobH

0

Cela vous permet de changer ce que les paramètres sont stockés d'une version à l'autre. Si la version 1.0.0 a défini "foo" et dans la version 2.0.0 vous divisez ce qui est dans 1.0.0/foo à 2.0.0/foo et 2.0.0/bar vous êtes toujours couvert. Votre assistant d'installation/configuration doit vérifier les branches de configuration des versions précédentes et les convertir en paramètres de la nouvelle version. Notez cependant que vous devez accéder directement au référentiel pour obtenir les versions précédentes.

+0

Il devrait vraiment être l'inverse. Si je publie un correctif comme 1.0.1 je ne devrais pas avoir à traverser tous ces problèmes. Je ne veux pas créer un nouveau programme d'installation pour cela. Et que dois-je faire avec les anciens paramètres de la version 1.0.0? Supprimez-les ou laissez-les dans le registre pour l'éternité? Que se passe-t-il si je les supprime et que l'utilisateur se rend compte que mon 1.0.1 n'est pas satisfaisant et qu'il descend pour continuer à utiliser 1.0.0 jusqu'à ce que je puisse lui donner un 1.0.2? Je pense que quelqu'un à M $ ne pensait pas clairement ici. –

3

Pourquoi ils pas fournir: UserAppDataRegistryVersionSpecific ET UserAppDataRegistryGlobal Ensuite, les développeurs auraient pu décider celui qu'ils préfèrent pour un projet/paramètres spécifiques spécifiques.

Par ailleurs, il existe une solution simple:

string VersionIndependentRegKey { 
    get { 
    string versionDependent = System.Windows.Forms.Application.UserAppDataRegistry.Name; 
    string versionIndependent = 
      versionDependent.Substring(0, versionDependent.LastIndexOf("\\")); 
    return versionIndependent; 
    } 
} 
object GetRegistryValue(string name, object defaultValue) { 
    return Registry.GetValue(VersionIndependentRegKey, name, defaultValue); 
} 
object GetRegistryValue(string name) { 
    return GetRegistryValue(name, null); 
} 
void SetRegistryValue(string name, object value, RegistryValueKind kind) { 
    Registry.SetValue(VersionIndependentRegKey, name, value, kind); 
} 
1

Voici une autre façon que j'utilise pour bande en option sur la version:

if (Include_Version == true) 
{ 
    rootRegKey = Application.UserAppDataRegistry; 
} 
else 
{ 
    regKey = Application.UserAppDataRegistry.Name; 
    rootRegKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(regKey.Substring(regKey.IndexOf("\\") + 1, regKey.LastIndexOf("\\") - regKey.IndexOf("\\") - 1), true); 
} 
Questions connexes