繁体   English   中英

多个应用程序,共享设置:使用注册表或基于XML的配置?

[英]Multiple Applications, Shared Settings: Use the registry or XML-based configuration?

我的情景

我有一个类库,将从多个单独的可执行应用程序中调用。 此类库需要知道要访问的数据库服务器的地址(以及许多其他配置选项,身份验证信息等)。 我有一个独立于类库的配置和管理应用程序,它还需要知道并设置这些配置选项。

我的问题

通常的做法是在Windows注册表中存储这些特定于用户的配置选项, 还是首选对类库使用典型的“App.config”XML方法,并允许配置工具更改和修改它?

我倾向于注册表方法,但我知道许多人对不使用它有意见。 你会怎么做?

最佳做法是在用户的%appdata%目录中使用XML配置文件。

有许多的原因:

  1. 您的应用程序最有可能安装到Program Files中。 如果用户未授予(或已授予)应用程序进程的管理权限,则无法写入该文件。
  2. 我已经在部分受信任的环境中工作,注册表访问根本不是一个选项。 客户端已完全禁用该服务器上的.NET运行时的注册表权限。
  3. 您的用户应始终可以访问自己的%appdata%目录。 这是一个示例:

     string configFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "myAppConfig.config"; ExeConfigurationFileMap map = new ExeConfigurationFileMap(); map.ExeConfigFilename = configFilePath; Configuration cfg = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); cfg.AppSettings.Settings.Add("mySetting", "myValue!"); cfg.Save(ConfigurationSaveMode.Modified); // to read the setting back string mySetting = cfg.AppSettings.Settings["mySetting"].Value; // at this point, mySetting = "myValue!" 

请记住将System.Configuration v2.0.0.0引用添加到您的项目中! 默认的System.Configuration命名空间没有所有必需的类。

我更喜欢xml配置而不是注册表设置,因为我可以简单地创建一个类并使用xmlSerializer打开并保存到我的类中。

检查此主题是否有类似的问题。

在我的特定情况下,这些特定的配置设置更有意义存储在注册表中。 我不能肯定我们的用户会将应用程序安装到相同的位置,至少,我必须将“主”配置XML文件的位置存储在注册表中,以便其他应用程序可以找到它。

我简单地用一个索引读取/写入配置设置到类似Hashtable( string ponySetting = myRegistryObject["DefaultPonySetting"] )并将其称为一天。 无论如何,我在所有其他应用程序中使用此类引用主程序集。 好哇

我不会确定使用注册表,但对于简单的应用程序范围的设置,我只是在与EXE相同的位置滚动我自己的XML文件,并使用我自己的类来访问它。 对于这种事情,.NET中的设置处理过于复杂,现在它甚至都不像过去那样糟糕。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM