在C:\ ProgramData \中编写时的权限/所有者问题

时间:2014-02-28 23:33:14

标签: windows winapi uac privileges

正如Writing config file in C:\Program Files (x86)\MyApp\myapp.cfg, vs. Administrator privilege所指出的那样,在<{1}}中编写配置文件是

而不是这个,我的软件现在将其数据保存在C:\Program Files (x86)\MyApp\myapp.cfg的子目录中(例如:Win7上的%ALLUSERSPROFILE%

[我在Python中使用C:\ProgramData\MyApp\myapp.cfg来执行此操作。]

我现在遇到有关此文件的问题:

  • 我使用myfile = open(filename, 'a')安装了软件,然后运行它,然后编写了文件User A
  • 然后,我将用户更改为C:\ProgramData\MyApp\myapp.cfg,然后再次运行我的软件:现在显示错误:User B无权写入User 2C:\ProgramData\MyApp\myapp.cfg

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

2 个答案:

答案 0 :(得分:34)

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

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

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

答案 1 :(得分:0)

我也想补充一点,因为我也遇到了写入C:\ ProgramData的问题。我的问题最终是C:\ ProgramData中的目录/文件是由管理员编写的。当我的应用程序在普通用户下运行时,无法在其中写入内容,因此Windows会自动使用C:\ Users \ fooface \ AppData \ Local \ VirtualStore \ ProgramData。通过在我的应用程序上使用进程监视器,我找到了写入的路径。看到此信息后,我从C:\ ProgramData中删除了文件,然后再次运行我的应用程序,并按预期将其写入了那里。

希望这对某人有帮助。