节省了'全球'数据作为一个标准的用户?
-
22-07-2019 - |
题
在我的应用程序,我需要储存设置"全球"(即不用户的具体)已知的和可预测的位置。
我想要应用程序能够从任何地方(作为一个标准的用户,不管理员),包括多份来自不同的地点和能够阅读和写保存的配置文件。
数据需要具有读写访问给予的所有标准的用户,不仅仅是一个。
考虑到这一点,这四个选项,指出在这里是不恰当的:http://msdn.microsoft.com/en-us/library/bb206295(VS。85).aspx#ID0E1BA
所以我有什么选择呢?
我的程序是用C++编写,并仅适用于Windows.我需要的支持Windows XP和以上。
谢谢。
编辑:
为了澄清,忽略竞争条件造成的多个实例。这个问题是仅仅与储存的数据。我看不到任何地方,合适的那是:
- 可预测的(例如%应用程序数据%\Foo是'可预测的路径,但不幸的是特定用户)
- 全球性的(例如%Program data%\Foo是一个全球性的路径,但不幸的是,只有创造户已经写入)
- 访问(标准用户的需要,以便能够创建新的文件中给出的目录,这适用于所有用户在系统上)
解决方案
如果你决定 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我没有问题,创建一个目录下根。
我肯定这会破坏各种各样的规则,但它是简单的。我喜欢简单的。
选项:
- 文件的互斥到控制进入文件
- 数据库来存储设置
- 网络服务商店的设置,它可以处理并发