代码之家  ›  专栏  ›  技术社区  ›  Basj

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

  •  49
  • Basj  · 技术社区  · 11 年前

    如中所述 Writing config file in C:\Program Files (x86)\MyApp\myapp.cfg, vs. Administrator privilege ,是的 在中编写配置文件是个好主意 C:\Program Files (x86)\MyApp\myapp.cfg .

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

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

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

    • 我用 User A ,然后运行该文件 C: \ProgramData\MyApp\MyApp.cfg 已写入。
    • 然后,我将用户更改为 User B ,然后再次运行我的软件:现在显示一个错误: User 2 无权写入 C: \ProgramData\MyApp\MyApp.cfg ( Permission denied ).

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

    2 回复  |  直到 7 年前
        1
  •  52
  •   David Heffernan    11 年前

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

    建议您的安装程序创建一个子目录 C: \程序数据 用于共享存储。安装程序必须为该子目录提供一个许可ACL。这就是向所有标准用户授予所需访问权限的原因。

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

        2
  •  6
  •   Wolf    4 年前

    我想补充一下,因为我写信给 C:\ProgramData 也我的问题最终是我的目录/文件 C: \程序数据 由管理员编写。当我的应用程序在正常用户下运行时,它无法在那里写入,因此Windows自动使用 C:\Users\fooface\AppData\Local\VirtualStore\ProgramData 相反我通过在应用程序上使用进程监视器找到了它正在写入的路径。看到这个后,我删除了中的文件 C: \程序数据 然后再次运行我的应用程序,它就如预期的那样运行了。

    希望这对某人有所帮助。