存在哪些替代Windows注册表的方法来存储软件配置设置 我有一个C++ MFC应用程序,它把所有系统配置配置都存储到注册表中。以前,我们使用.INI文件,几年前使用 SetRegistryKey("MyCompanyName");

存在哪些替代Windows注册表的方法来存储软件配置设置 我有一个C++ MFC应用程序,它把所有系统配置配置都存储到注册表中。以前,我们使用.INI文件,几年前使用 SetRegistryKey("MyCompanyName");,c++,mfc,registry,C++,Mfc,Registry,我们现在经常接到用户的支持电话,这些用户在从PC和Windows版本迁移到另一个版本时遇到困难。我得出的结论是,使用注册表导致的问题比它解决的问题多得多。我也不特别想回到.INI文件,因为我想存储每个用户的设置,所以计划编写我自己的GetProfile版本。。。和SetProfile。。。使用数据库的函数。有人已经这样做了吗?有人知道现有的注册表使用替换库中有一个不需要太多代码修改的替换库吗?理想情况下,我也希望它有从注册表读取初始值的选项,以支持现有用户。不过,您可以为每个用户存储一个单独的I

我们现在经常接到用户的支持电话,这些用户在从PC和Windows版本迁移到另一个版本时遇到困难。我得出的结论是,使用注册表导致的问题比它解决的问题多得多。我也不特别想回到.INI文件,因为我想存储每个用户的设置,所以计划编写我自己的GetProfile版本。。。和SetProfile。。。使用数据库的函数。有人已经这样做了吗?有人知道现有的注册表使用替换库中有一个不需要太多代码修改的替换库吗?理想情况下,我也希望它有从注册表读取初始值的选项,以支持现有用户。

不过,您可以为每个用户存储一个单独的INI文件,尽管我不知道WinAPI是否直接支持该文件。至少有很多应用程序可以这样做(例如)


更新:显然API支持它。

您可以构建一个类似的系统,其中配置文件位于安全目录中,然后您可以使用访问它。

我建议转到与可执行文件位于同一位置的XML文件。一个好处是XML可以跨非Windows机器(甚至在Windows版本之间)移植


编辑:与可执行文件位于同一位置的XML配置文件背后的思想是,配置文件用于程序配置(而不是用户)和封装/数据隐藏(而不是污染全局文件系统目录)。用户配置数据应位于用户或用户选择的目录中的另一个文件中

苹果使用的文件基本上都是XML。

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

Boost有一个名为库的库,该库将设置抽象为层次结构。它可以序列化为多种格式,如XML、JSON和INI


将这些文件存储在
%APPDATA%
中。将它们存储在与可执行文件相同的目录中不是一个好主意,因为XP上的普通用户无法写入
%PROGRAMFILES%

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

他可以使用用户特定的设置目录来完成这项工作。就像在XP中一样:C:\Docs and Settings\\Application Data\\…尤其是在已经有一个API调用来获取用户的AppData文件夹路径的情况下…是的,这就是我的想法。您正试图通过切换到数据库来减少支持调用吗?你曾经支持过一个吗?公平地说,一个简单的XML文件就足够了,而不是一个与我目前想法非常一致的数据库,XML和exe文件夹。我感到惊讶的是,虽然谷歌没有表现出太多的兴趣,但它已经没有什么东西了。-1除非你的应用程序不会安装到Program Files目录,否则你在编写XML文件时会遇到权限问题。Windows非管理员帐户,以及启用UAC的块写入程序文件的安装。配置文件应位于用户的应用程序数据目录中。如果它与可执行文件位于同一位置,则它仅存在于单个实例中。当然,您可以将所有用户设置存储在单个文件中(用XML处理这一点肯定比用INI更容易)。。。但它仍然不是理想的IMHO。在我们的内部应用程序中,有一个层次结构,它以一个标准的.ini文件开始,该文件与可执行文件位于同一位置,没有人会改变这一点。还有一些其他可能的位置可以覆盖,其中一些位置用户可以根据自己的意愿进行更改。因此,如果用户刚开始使用该应用程序,有合理的配置,但用户可以自定义。@Jon,谢谢。我正是想避免这种UAC的胡说八道。我将使用一个不同的文件夹,尽管可能会为所有用户使用一个XML文件,并完全避免使用Windows API。这将是我的解决方案,除了Boost.PropertyTree使用RapidXML,它不处理UTF-8 XML文件。如果它使用pugixml,那么一切都会好起来!