Answers:
$HOME/.config/your-app/
,这是一种用于解决问题@grep对象的解决方案。而且,令人惊讶的是,现代Linux(以及* BSD上的所有人都疯狂使用GNOME)在套件中也有一个注册表gconf
。FOSS会带来很多选择,这是肯定的;)
从用户和程序员的角度来看,我不得不说,除非在文件关联或计算机特定设置之类的东西上,否则在注册表中放置一个东西确实不是一个很好的借口。
我来自一个流派,他说一个程序应该可以在任何安装位置运行,该安装应该可以在一台机器内甚至在另一台机器上完全移动,并且不影响其运行。
任何未共享的可配置选项或必需的dll等(如果未共享)应位于安装目录的子目录中,以便轻松移动整个安装。
我使用了许多较小的实用程序,例如程序,因此,如果无法将其安装在USB记忆棒上并插入另一台计算机上并且可以运行,那么它对我来说不适合。
微软政策:
注册表取决于计算机。我从来不喜欢它,因为它变慢了,几乎不可能找到您需要的东西。这就是为什么我喜欢简单的ini或其他设置文件。您知道它们的位置(应用程序文件夹或用户文件夹),因此它们易于携带并且易于阅读。
何时 -由于旧式集成,或者由于客户的sysadmin说“应该如此”,或者因为您使用的是旧语言进行开发而使使用XML变得更加困难,您不得不这样做。
原因 -主要是因为注册表不像复制位于应用程序旁边的配置文件那样可移植(被称为几乎相同)。
如果您使用的是.Net2 +,则需要App.Config和User.Config文件,并且无需在注册表中注册DLL,因此请远离它。
配置文件有其自身的问题(请参阅下文),但是可以对其进行编码,并且可以更改体系结构。
如果您在Windows注册表中存储几个窗口位置和最近使用过的项目列表,世界将会终结吗?到目前为止,对我来说还好。
HKEY-CURRENT-USER是一个存储少量用户数据的好地方。这就是它的目的。仅仅因为其他人滥用了它而没有将它用于预期的目的似乎很愚蠢。
如果你正在开发一个新的应用程序,你关心的可移植性,你应该永远不会存储在Windows注册表的数据,因为其他的操作系统没有(窗口)注册表(杜注-这可能是明显的,但被常常被忽视)。
如果您仅针对Win平台进行开发,请尽量避免使用它。配置文件(可能已加密)是一种更好的解决方案。将数据存储到注册表中没有任何好处-(例如,如果使用.NET,隔离存储是更好的解决方案)。
有点题外话,但是由于我看到有人担心可移植性,所以我使用过的最好的方法是Qt的QSettings类。它抽象化设置的存储(Windows上的注册表,Mac OS上的XML首选项文件和Unix上的Ini文件)。作为班级的客户,我不必花时间去思考注册表或其他任何东西,它就是Just Works(tm)。
通常,如果您不将设置放入注册表中,则通常将其用于获取当前Windows设置,更改文件关联等。
现在,如果需要检测软件是否已安装,则可以在注册表中进行最少的输入,这是您可以在任何配置中找到的位置。或者在“应用程序数据”中搜索给定名称的文件夹。
如果查看“文档和设置”文件夹,则会看到许多使用Unix点表示法设置文件夹的软件:.p4qt .sqlworkbench .squirrel-sql .SunDownloadManager .xngr .antexplorer .assistant .CodeBlocks .dbvis .gimp-2.4 .jdictionary .jindent .jogl_ext(等)
在“应用程序数据”中,带有编辑器名称或软件名称的各种文件夹。看起来是当前的趋势,至少在便携式应用程序中……
WinMerge使用略有不同的方法,将数据存储在注册表中,但是在配置对话框中提供了“导入和导出”选项。
在.NET中,确实不再需要。
这是两个示例,显示了如何使用项目属性来执行此操作。
这些示例通过Windows用户项目属性来完成,但是应用程序也可以/可以做到。
更多内容:
我相信Windows注册表是一个好主意,但是由于应用程序开发人员的大量滥用以及Microsoft不鼓励/要求的标准策略,它变得难以管理。由于您提到的原因,我不喜欢使用它,但是在某些情况下使用它很有意义: