【问题标题】:Where can I write data that can be viewed and modified by all users in Windows Vista?在 Windows Vista 中,我在哪里可以写入所有用户都可以查看和修改的数据?
【发布时间】:2009-05-22 14:01:57
【问题描述】:

我需要写入一些数据(用于试用/到期),并且我需要应用程序能够从 Vista 上的非管理员帐户读取/写入该位置,并且 UAC “开启”。

另外,我希望能够查看和修改来自任何用户帐户的数据。

我最初考虑写入 KHEY_CURRENT_USER 注册表配置单元,但这对于每个用户来说都是唯一的。

还有其他地点吗?

我试过了: %ALLUSERSPROFILE%\TestDirectory

但如果 NonAdmin1 创建和编辑文件,则 Admin1 在修改后无法保存文件(尽管它可以读取文件)。

【问题讨论】:

    标签: windows-vista


    【解决方案1】:

    有一篇关于此的博客文章:blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx(我'还不允许超链接,你必须剪切-粘贴直到它得到纠正)。

    它实际上似乎围绕着一个特定的问题:如果您有应该由所有用户写入的文件,您是否希望用户在资源管理器中发现这些文件并能够双击它们,或者您想要要隐藏且仅由您的应用程序在后台使用的文件。

    如果您希望所有用户都可以在资源管理器中发现这些文件,您可能希望将它们放在 c:\users\public 中。您所要做的就是将它们放在那个位置,并且默认的安全性应该可以工作。

    如果您希望对用户隐藏文件,您可能希望将它们放在 c:\programdata 中。在这种情况下,当您创建文件时,默认安全性可能不正确,因此您需要让您的应用程序对文件进行 ACL。或者更好的办法是让您的安装程序在 c:\programdata 下为您的应用程序创建一个目录结构,并让安装程序在每个目录上设置好的默认 ACL - 这样您的应用程序就不必在实际设置 ACL 时感到抱歉创建文件,它只需要在正确的位置创建文件。

    在所有情况下,您都应该调用适当的 Win32(或 .Net Framework)函数来获取 c:\programdata 或 c:\users\public 目录的路径。不要在你的应用中硬编码这些路径 - 如果你硬编码,你会错过一些情况,即用户移动了目录或以某种不常见的方式安装了 Windows,你的应用将会崩溃。

    【讨论】:

      【解决方案2】:

      当您创建文件或将其写出后,我认为您应该能够修改“用户”组的权限以获得更多访问权限。看起来“创建者所有者”获得了完全权限,而“用户”组只能读取和执行。

      另一个选项可能是创建“TestDirectory”目录并将用户组设置为在安装期间具有完全访问权限。

      【讨论】:

      • 如何以编程方式修改权限?也许与 CACLS? IIRC,需要管理员权限。
      • 文件的创建者通常具有特殊权限。我能够在我在 c:\ProgramData 中创建的文件夹中添加用户组的写入权限,而无需 UAC 提升。不过,我已经有一段时间没有进行任何权限编程了:(
      猜你喜欢
      • 2022-12-24
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多