在我的应用程序,我需要储存设置"全球"(即不用户的具体)已知的和可预测的位置。

我想要应用程序能够从任何地方(作为一个标准的用户,不管理员),包括多份来自不同的地点和能够阅读和写保存的配置文件。

数据需要具有读写访问给予的所有标准的用户,不仅仅是一个。

考虑到这一点,这四个选项,指出在这里是不恰当的:http://msdn.microsoft.com/en-us/library/bb206295(VS。85).aspx#ID0E1BA

所以我有什么选择呢?

我的程序是用C++编写,并仅适用于Windows.我需要的支持Windows XP和以上。

谢谢。

编辑:

为了澄清,忽略竞争条件造成的多个实例。这个问题是仅仅与储存的数据。我看不到任何地方,合适的那是:

  1. 可预测的(例如%应用程序数据%\Foo是'可预测的路径,但不幸的是特定用户)
  2. 全球性的(例如%Program data%\Foo是一个全球性的路径,但不幸的是,只有创造户已经写入)
  3. 访问(标准用户的需要,以便能够创建新的文件中给出的目录,这适用于所有用户在系统上)
有帮助吗?

解决方案

如果你决定 CSIDL_COMMON_APPDATA 是不是适当的(也许 CSIDL_COMMON_APPDATA 是一个很好的默认,但是你想要的管理员可以改变位置)可以有安装写的东西到 HKLM\SOFTWARE\<your app subkey> 这表示所需的道路,为共同的目录中,将举办数据。

一种替代将指针在HKLM注册是有一个配置文件驻留在程序的目录,它有一个指向的共用目录。通过定义的节目目录的,必须写入安装,这是可写的管理员(他们可能负责修改配置),这是可由用户。所以一个标准的用户可以读取一个众所周知的位置(无论是一个HKLM子的钥匙或配置文件在程序的目录)得到一个指向一个目录,该目录的可写的所有标准的用户。

什么设置了公共目录(安装的程序或配置模块)将需要确保公共目录的ACL设置适当的标准用户写。

其他提示

试试公用文件夹中的用户配置文件的目录:

CSIDL_COMMON_DOCUMENTS

编辑:或者不用

CSIDL_COMMON_APPDATA

但设定的权限,以通过身份验证的用户集团,如果可能的。

你可能找CSIDL_COMMON_APPDATA.请参考,也应该是一个好的选择你应该去的任何Windows签名的认证。在这种情况下不适合你的要求,检查 这个链接上MSDN, 你应该能够找到最适合你的需要。
好运气。

可你不仅仅使用固定目录名称,例如c:\FixedDataForYourProgram

我们这样做XP。我还没试过这种编程方式上Vista/windows7资,但登录作为一个标准用户在Vista我没有问题,创建一个目录下根。

我肯定这会破坏各种各样的规则,但它是简单的。我喜欢简单的。

选项:

  1. 文件的互斥到控制进入文件
  2. 数据库来存储设置
  3. 网络服务商店的设置,它可以处理并发
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top