在我的应用程序中,我需要将“全局”(即不特定于用户)的设置存储在一个已知和可预测的位置。
我希望应用程序能够在任何地方运行(作为标准用户,而不是管理员),包括来自不同位置的多个副本,并且能够读取和写入保存的配置文件。
数据需要授予所有标准用户的读写访问权限,而不仅仅是一个。
考虑到这一点,这里提到的四个选项是不合适的:http://msdn.microsoft.com/en-us/library/bb206295(VS.85).aspx#ID0E1BA
那么我的选择是什么?
我的应用程序是用C++编写的,只适用于Windows。我需要支持Windows和更高版本。
谢谢。
编辑:
若要澄清,请忽略由多个实例引起的争用条件。这个问题只与数据的存储位置有关。我看不出合适的地方是:
发布于 2009-09-18 16:30:13
如果您认为CSIDL_COMMON_APPDATA不合适(也许CSIDL_COMMON_APPDATA是一个很好的默认设置,但您希望管理员能够更改位置),您可以让安装程序向HKLM\SOFTWARE\<your app subkey>写入一些东西,该HKLM\SOFTWARE\<your app subkey>指示将保存数据的公共目录的所需路径。
将指针放置在HKLM注册表中的另一种方法是在程序目录中有一个配置文件,该文件具有指向共享目录的指针。根据定义,程序目录必须由安装程序写,由管理员(可能负责修改配置)写,用户可以读。因此,标准用户可以读取一个众所周知的位置(一个HKLM子键或程序目录中的一个配置文件),以获得一个指向所有标准用户可写目录的指针。
任何设置公共目录(安装程序或配置模块)的内容都需要确保公共目录的ACL为标准用户写入设置了适当的设置。
发布于 2009-09-18 15:47:29
尝试用户配置文件目录中的公用文件夹:
CSIDL_COMMON_DOCUMENTS编辑:或使用
CSIDL_COMMON_APPDATA但是,如果可能的话,请将权限设置为身份验证用户组。
发布于 2009-09-18 16:02:24
你可能在找CSIDL_COMMON_APPDATA。IIRC,这也应该是一个很好的选择,如果你去任何Windows标志认证。如果它不适合您的需求,请检查MSDN上的此链接,您应该能够找到最适合您的需求。
祝好运。
https://stackoverflow.com/questions/1445308
复制相似问题