2009-05-22 50 views
2

我需要写一些数据(试用/过期),我需要的应用程序,以便能够读/写从“上”与Vista的UAC一个非管理员帐户的位置。在哪里可以写入Windows Vista中所有用户都可以查看和修改的数据?

而且,我希望能够看到和任何用户帐户修改数据。

我原本认为写KHEY_CURRENT_USER注册表配置单元,但是,这将是为每个用户唯一的。

任何其他地点?

我想: %ALLUSERSPROFILE%\ TestDirectory

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

回答

0

当您创建的文件或你写出来之后,我想你应该能够修改权限的“Users”组有更多的访问。它看起来像“创作者所有者”获得完全许可,并且“用户”组只读&执行。

另一种选择可能是创建“TestDirectory”目录,并设置用户组具有在安装过程中完全访问权限。

+0

我将如何修改权限编程?也许与CACLS? IIRC,这需要管理员权限。 – 2009-05-22 15:46:28

1

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

它实际上似乎围绕一个特定的问题:如果你有文件应该是所有用户都可写的,你希望用户发现浏览器中的文件,并能够双击它们,或者你希望这些文件被隐藏,并且只能在应用程序的后台使用。

如果你想要的文件的所有用户在资源管理器中发现的,你可能想将它们放在C:\用户\公用。所有你需要做的就是把它们放在那个位置,并且默认的安全性应该可以工作。

如果你想将文件从用户隐藏,你可能想将它们放在C:\ programdata。在这种情况下,当您创建文件时,默认安全性可能不正确,因此您需要将应用程序ACL设置为文件。或者更好的是可能让你的安装程序在c为您的应用程序的目录结构:\ programdata,并且有安装程序设置好默认的ACL对每个目录 - 那么您的应用程序不必抱歉设置ACL的时候,它实际上创建文件,它只需要在正确的位置创建文件。

在任何情况下,你应该调用适当的Win32(或.Net框架)函数来获取路径到c:\ programdata或C:\用户\ public目录。不要硬编码这些路径在您的应用程序 - 如果你硬编码,你会错过一些情况下用户移动的目录或在某些不常见的方式安装了Windows,而且您的应用将打破。

相关问题