作为开发人员,在注册表中存储配置/选项的工具是我生命中的祸根。我无法轻易跟踪这些选项的变化,无法轻松地将它们从机器移植到机器上,这一切都让我真正渴望.INI文件的美好时光......
在编写自己的应用程序时,我应该选择放入注册表而不是旧式配置文件,为什么?
答案 0 :(得分:71)
答案 1 :(得分:16)
从用户角度和程序员角度来看,我不得不说除了文件关联或机器特定设置之外,在注册表中放置一些东西确实没有什么好处。
我来自思想学院,他说程序应该可以从安装的任何地方运行,安装应该可以在机器内完全移动,甚至可以移动到另一台机器上,而不会影响它的运行。
任何可配置选项或必需的dll等,如果它们不共享,则应位于安装目录的子目录中,以便轻松移动整个安装。
我使用了许多较小的实用程序,所以如果它不能安装在usb棒上并插入另一台机器并运行,那么它不适合我。
答案 2 :(得分:12)
Microsoft政策:
注册表取决于机器。我从来不喜欢它,因为它变慢了,找到你需要的东西几乎是不可能的。这就是我喜欢简单的ini或其他设置文件的原因。您知道它们的位置(应用程序文件夹或用户文件夹),因此它们易于携带且易于阅读。
答案 3 :(得分:10)
何时 - 由于遗留集成或您客户的系统管理员说“它应该如此”,或者因为您使用较旧的语言进行开发而导致使用XML变得更加困难
为什么 - 主要是因为注册表不像复制位于应用程序旁边的配置文件那样可移植(并且被称为几乎相同)。
如果您正在使用.Net2 +,您已经获得了App.Config和User.Config文件,您无需在注册表中注册DLL,因此请远离它。
配置文件有各自的问题(见下文),但这些问题可以编码,你可以改变你的架构。
答案 4 :(得分:7)
如果在Windows注册表中存储几个窗口位置和最近使用的项目列表,世界是否会结束?到目前为止,它对我有用。
HKEY-CURRENT-USER是存储少量琐碎用户数据的好地方。这就是它的用途。仅仅因为其他人滥用它而似乎没有用于其预期目的。
答案 5 :(得分:4)
您希望在用户的漫游配置文件中可用的设置可能应该放在注册表中,除非您真的想要手动查找用户的Application Data文件夹。 : - )
答案 6 :(得分:4)
注册表读取和写入是线程安全的,但文件不是。所以这取决于你的程序是否是单线程的。
答案 7 :(得分:2)
如果你正在开发一个新的应用程序并且你关心可移植性,你应该从不在windows注册表中存储数据,因为其他操作系统没有(windows)注册表(注意 - 这可能是显而易见的但经常被忽视)。
如果您只是为Win平台开发...尽量避免使用它。配置文件(可能是加密的)是一种更好的解决方案。将数据存储到注册表中没有任何好处 - (例如,如果您使用.NET,隔离存储是一个更好的解决方案)。
答案 8 :(得分:2)
稍微偏离主题,但由于我看到人们担心可移植性,我用过的最好的方法是Qt的QSettings类。它抽象了设置的存储(Windows上的注册表,Mac OS上的XML首选项文件和Unix上的Ini文件)。作为班级的客户,我不必花费大脑周期来思考注册表或其他任何东西,它只是工作(tm)。
答案 9 :(得分:0)
通常,如果您没有在注册表中设置设置,则主要使用它来获取当前的Windows设置,更改文件关联等。
现在,如果您需要检测您的软件是否已经安装,您可以在注册表中创建一个最小的条目,这是您可以在任何配置中找到的位置。或者在应用程序数据中搜索给定名称的文件夹。
如果我查看我的文档和设置文件夹,我会看到许多使用Unix点符号设置文件夹的软件: .p4qt .sqlworkbench .squirrel-SQL .SunDownloadManager .xngr .antexplorer 。助理 .CodeBlocks .dbvis .gimp-2.4 .jdictionary .jindent .jogl_ext(等)
在Application Data中,包含编辑器名称或软件名称的各种文件夹。看起来像是当前的趋势,至少在便携式应用程序中... ... WinMerge使用稍微不同的方法,将数据存储在注册表中,但在配置对话框中提供导入和导出选项。
答案 10 :(得分:0)
我个人使用注册表来存储安装路径以供(un)安装脚本使用。我不确定这是否是唯一可能的选择,但似乎是一个明智的解决方案。这是一个仅在Windows上使用的应用程序。
答案 11 :(得分:0)
在.NET中确实没有必要。
以下是两个展示如何使用Project proerties来实现此目的的示例。
这些示例通过Windows用户项目属性执行此操作,但同样可以/可以由Application完成。
更多信息:
答案 12 :(得分:0)
(讨论后期但是)简答:组策略。
如果客户的IT部门想要强制执行与您正在编写或捆绑的Windows或组件相关的设置,例如链接速度,自定义错误消息或要连接的数据库服务器,仍然通常通过组策略完成,组策略使其最终表现为存储在注册表中的设置。此类策略在Windows启动或用户登录时强制执行。
有一些工具可以创建自定义ADMX模板,可以将组件的设置映射到注册表位置,并为管理员提供一个通用界面来强制执行他需要执行的策略,同时只显示那些对执行有意义的设置这样。
答案 13 :(得分:-1)
我认为Windows注册表是一个好主意,但是由于应用程序开发人员的大量滥用以及微软不鼓励/强制执行的标准策略变成了难以管理的野兽。我讨厌使用它是出于你提到的原因,但是有些时候使用它是有道理的: