在C:\ ProgramData \中编写特权/所有者问题

正如在C:\ Program Files(x86)\ MyApp \ myapp.cfg中写configuration文件指出的,与pipe理员权限 ,在C:\Program Files (x86)\MyApp\myapp.cfg编写configuration文件不是一个好主意C:\Program Files (x86)\MyApp\myapp.cfg

现在,我的软件将其数据保存在%ALLUSERSPROFILE% C:\ProgramData\MyApp\myapp.cfg (例如Win7上的C:\ProgramData\MyApp\myapp.cfg

[我在Python中使用myfile = open(filename, 'a')来执行此操作。]

我现在遇到关于这个文件的问题:

  • 我用User A安装了软件,然后运行它,然后编写了C:\ProgramData\MyApp\myapp.cfg文件。
  • 然后,我将用户更改为User B ,并再次运行我的软件:现在显示一个错误: User 2无权在C:\ProgramData\MyApp\myapp.cfgPermission denied )中C:\ProgramData\MyApp\myapp.cfg

为什么? 是不是%ALLUSERSPROFILE%所有用户都可以写的地方? 如何解决这个问题呢 ?

不, C:\ProgramData ,又名FOLDERID_ProgramData ,限制了安全设置。 标准用户可以在那里创建文件。 但是这些文件在默认情况下是安全的,只有创建文件的用户才能修改文件。

建议的解决方案是让您的安装程序为您的共享存储创建一个C:\ProgramData子目录。 并且该子目录必须由安装程序授予一个允许的ACL。 这是授予所有标准用户所需的访问权限。

我想知道你是否真的需要共享可写数据。 通常我会希望看到共享配置是在安装时指定的,并且不常被管理员修改。 大多数配置数据往往是每个用户。