首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将“全局”数据保存为标准用户?

将“全局”数据保存为标准用户?
EN

Stack Overflow用户
提问于 2009-09-18 15:33:19
回答 5查看 407关注 0票数 5

在我的应用程序中,我需要将“全局”(即不特定于用户)的设置存储在一个已知和可预测的位置。

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

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

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

那么我的选择是什么?

我的应用程序是用C++编写的,只适用于Windows。我需要支持Windows和更高版本。

谢谢。

编辑:

若要澄清,请忽略由多个实例引起的争用条件。这个问题只与数据的存储位置有关。我看不出合适的地方是:

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

回答 5

Stack Overflow用户

回答已采纳

发布于 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为标准用户写入设置了适当的设置。

票数 2
EN

Stack Overflow用户

发布于 2009-09-18 15:47:29

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

代码语言:javascript
运行
复制
CSIDL_COMMON_DOCUMENTS

编辑:或使用

代码语言:javascript
运行
复制
CSIDL_COMMON_APPDATA

但是,如果可能的话,请将权限设置为身份验证用户组。

票数 1
EN

Stack Overflow用户

发布于 2009-09-18 16:02:24

你可能在找CSIDL_COMMON_APPDATA。IIRC,这也应该是一个很好的选择,如果你去任何Windows标志认证。如果它不适合您的需求,请检查MSDN上的此链接,您应该能够找到最适合您的需求。

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1445308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档