存在哪些 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\\Application Data\\... 特别是已经有一个 API 调用来获取用户的 AppData 文件夹路径...... 是的,我就是这么想的。【参考方案4】:

你可以建立一个类似.Net's Isolated Storage的系统,其中配置文件位于安全目录,然后你可以使用GetPrivateProfileString访问它。

【讨论】:

【参考方案5】:

您可以切换到存储在用户应用程序数据文件夹,甚至可能是“我的文档”文件夹中的 XML/INI 配置文件。这样用户可以复制文件以保留他们的设置。

【讨论】:

【参考方案6】:

我在上一个桌面应用程序项目中停止使用注册表,而是使用存储在用户%APPDATA% 文件夹中的 INI 文件。如果您只存储字符串和整数,那么 INI 文件就可以完成这项工作,并且很容易在记事本中进行编辑。

【讨论】:

【参考方案7】:

Apple 使用基本上是 XML 的 plist 文件。

【讨论】:

以上是关于存在哪些 Windows 注册表替代品来存储软件配置设置 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

传统文件同步方式存在哪些问题?该如何寻找替代同步软件?

定制windows环境下cmd替代软件ConEmu

重要的接口需要做哪些检查(转)

pnpm 的包管理器替代品都有哪些?

如何卸载GHO里面已经安装的软件,例如 Q Q,高分求高手来解!!

java中的Web开发存在哪些Spring+JSF/Facelets的替代品?