将"全球"数据保存为标准用户?

Rap*_*tor 5 c c++ windows configuration save

在我的应用程序中,我需要在已知且可预测的位置存储"全局"(即非特定于用户)的设置.

我希望应用程序能够从任何地方(作为标准用户,而不是管理员)运行,包括来自不同位置的多个副本,并能够读取和写入保存的配置文件.

数据需要为所有标准用户授予读写访问权限,而不仅仅是一个.

考虑到这一点,这里提到的四个选项是不合适的:http: //msdn.microsoft.com/en-us/library/bb206295(VS.85).aspx#ID0E1BA

那么我有什么选择呢?

我的应用程序是用C++编写的,仅适用于Windows.我需要支持Windows XP及更高版本.

谢谢.

编辑:

为了澄清,忽略由多个实例引起的竞争条件.这个问题仅与存储数据的位置有关.我看不到任何适合的地方:

  1. 可预测的(例如,%APPDATA%\ Foo是'可预测的'路径,但遗憾的是用户特定的)
  2. 全局(例如%PROGRAMDATA%\ Foo是一个全局路径,但不幸的是只有创建用户具有写访问权限)
  3. 可访问(标准用户需要能够在给定目录中创建新文件,这适用于系统上的所有用户)

Mic*_*urr 2

如果您认为这CSIDL_COMMON_APPDATA不合适(也许CSIDL_COMMON_APPDATA是一个很好的默认值,但您希望管理员能够更改位置),您可以让安装程序向 中写入一些内容HKLM\SOFTWARE\<your app subkey>,以指示将保存该文件的公共目录的所需路径。数据。

将指针放置在 HKLM 注册表中的另一种方法是在程序目录中放置一个配置文件,该文件具有指向共享目录的指针。根据定义,程序目录必须可由安装程序写入,可由管理员(可能负责修改配置)写入,并且可由用户读取。因此,标准用户可以读取众所周知的位置(HKLM 子项或程序目录中的配置文件)以获取指向所有标准用户均可写入的目录的指针。

无论如何设置公共目录(安装程序或配置模块),都需要确保公共目录的 ACL 已针对标准用户写入进行了适当设置。