代码之家  ›  专栏  ›  技术社区  ›  Dan Byström

application.userAppDataRegistry和版本号

  •  1
  • Dan Byström  · 技术社区  · 15 年前

    *或:“在哪里 %#%/我应该存储我的设置吗?”

    为什么application.userappdataregistry注册表项中包含产品版本号?我觉得这很烦人。

    这不只是鼓励开发人员永远使用版本号1.0.0吗,因为更改版本号会导致用户丢失所有设置(除非付出额外的努力)?

    如果我去掉版本号,它当然会“更好地”工作(就像我看到的那样),但是框架仍然用版本号创建注册表项。

    我在监督什么?

    5 回复  |  直到 11 年前
        1
  •  1
  •   Decker97    15 年前

    我认为这就是IsolatedStorage的目的。下面是一些示例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
    

    如果使用getuserstoreforapplication,则它不是特定于版本的。

        2
  •  3
  •   Oliver Sviszt    14 年前

    他们为什么不提供: UserAppDataRegistryVersionSpecific和UserAppDataRegistryGlobal 然后,开发人员可以决定他们更喜欢哪个项目/特定的设置。

    顺便说一下,有一个简单的解决方法:

    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);
    }
    
        3
  •  1
  •   pleitch    11 年前

    下面是另一种我可以选择去掉版本的方法:

    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);
    }
    
        4
  •  0
  •   Andrew Keith    15 年前

    我估计版本号在里面,这样用户就可以安装两个版本的应用程序并并行运行它们。除此之外,我不认为当版本号改变时会失去所有配置的合理性。

    就个人而言,我通常使用配置文件来保存配置信息并避免使用Windows注册表。

        5
  •  0
  •   Frank Ames    15 年前

    这允许您将存储的设置从一个版本更改为另一个版本。如果版本1.0.0设置了“foo”,并且在版本2.0.0中,您将1.0.0/foo中的内容拆分为2.0.0/foo和2.0.0/bar,则仍将覆盖您的内容。安装程序/配置向导需要检查以前版本的设置分支,并将其转换为新版本的设置。不过,请注意,您需要直接访问存储库才能获得以前的版本。

    推荐文章