存在哪些 Windows 注册表替代品来存储软件配置设置 [关闭]
Posted
技术标签:
【中文标题】存在哪些 Windows 注册表替代品来存储软件配置设置 [关闭]【英文标题】:What alternatives to the Windows registry exist to store software configuration settings [closed] 【发布时间】:2010-02-19 15:22:08 【问题描述】:我有一个 C++ MFC 应用程序,它将其所有系统范围的配置设置存储到注册表中。以前,我们使用 .INI 文件,并在几年前改用使用注册表
SetRegistryKey("MyCompanyName");
现在,我们经常接到从 PC 和 Windows 版本迁移到另一个版本有困难的用户打来的支持电话,我得出的结论是,使用注册表会导致比它解决的问题多得多的问题。我也不想回到 .INI 文件,因为我想存储每个用户的设置,所以计划是编写我自己的 GetProfile 版本...和 SetProfile... 函数以使用数据库。是否有人已经这样做了,是否有人知道现有的注册表使用替换库不需要太多代码修改?理想情况下,我还希望它可以选择从注册表中读取初始值以支持现有用户。
【问题讨论】:
您正试图通过切换到数据库来减少支持电话?你曾经支持过一个吗? 很公平,可能一个简单的 XML 文件就足够了,而不是数据库 【参考方案1】:Boost 有一个名为Boost.PropertyTree
的库,它将设置抽象为层次结构。它可以序列化为多种格式,例如 XML、JSON 和 INI。
将这些文件存储在%APPDATA%
中。将它们存储在与可执行文件相同的目录中并不是一个好主意,因为从 XP 开始,普通用户无法写入 %PROGRAMFILES%
。
【讨论】:
这将是我的解决方案,除了 Boost.PropertyTree 使用 RapidXML,它不处理 UTF-8 XML 文件。如果它改为使用 pugixml,那么一切都会好起来的!【参考方案2】:我建议转移到与可执行文件位于同一位置的 XML 文件。一个好处是 XML 可以在非 Windows 机器之间移植(甚至在 Windows 版本之间)。
编辑: 与可执行文件位于同一位置的 XML 配置文件背后的想法是,配置文件用于程序配置(不是用户)和封装/数据隐藏(不污染全局文件系统目录)。用户配置数据应该在用户或用户选择的目录中的另一个文件中。
【讨论】:
这非常符合我目前的想法,XML 和 exe 文件夹。我很惊讶那里还没有什么东西,尽管谷歌并没有表现出太大的兴趣。 -1 除非您的应用程序不会安装到 Program Files 目录,否则您将在编写 XML 文件时遇到权限问题。 Windows 非管理员帐户和启用了 UAC 的安装会阻止写入程序文件。配置文件应位于用户的应用程序数据目录中。 如果它与可执行文件位于同一位置,则它仅存在于单个实例中。当然,您可以将所有用户设置存储在该单个文件中(并且在 XML 中处理它肯定比在 INI 中更容易)......仍然不是理想的恕我直言。 在我们的内部应用程序中,有一个以标准 .ini 文件开头的层次结构,该文件与可执行文件位于同一位置,没有人会更改它。还有一些其他可能的位置会覆盖它,其中一些用户可以根据自己的需要进行更改。所以,如果用户刚开始使用应用程序,有合理的配置,但用户可以自定义。 @Jon,谢谢。我正试图避免这种类型的 UAC 废话。我将使用不同的文件夹,但可能会为所有用户坚持使用单个 XML 文件并完全避免使用 Windows API。【参考方案3】:不过,您可以为每个用户存储一个单独的 INI 文件——尽管我不知道这是否被 WinAPI 直接支持。至少很多应用程序都这样做(例如TotalCommander)。
更新:显然它受 API 支持。
【讨论】:
他可以通过使用用户特定的设置目录来做到这一点。就像在 XP 中一样:C:\Docs and Settings\你可以建立一个类似.Net's Isolated Storage的系统,其中配置文件位于安全目录,然后你可以使用GetPrivateProfileString访问它。
【讨论】:
【参考方案5】:您可以切换到存储在用户应用程序数据文件夹,甚至可能是“我的文档”文件夹中的 XML/INI 配置文件。这样用户可以复制文件以保留他们的设置。
【讨论】:
【参考方案6】:我在上一个桌面应用程序项目中停止使用注册表,而是使用存储在用户%APPDATA%
文件夹中的 INI 文件。如果您只存储字符串和整数,那么 INI 文件就可以完成这项工作,并且很容易在记事本中进行编辑。
【讨论】:
【参考方案7】:Apple 使用基本上是 XML 的 plist 文件。
【讨论】:
以上是关于存在哪些 Windows 注册表替代品来存储软件配置设置 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章