Windows 7是否限制文件夹访问权限?

时间:2011-03-06 12:49:52

标签: winapi windows-7 windows-vista uac special-folders

我注意到在我的应用程序中,大多数兼容性问题是由某些文件夹的“拒绝访问”引起的,例如:

Application Data [C:\ProgramData]
Desktop [C:\Users\Public\Desktop]
Documents [C:\Users\Public\Documents]
Favorites [C:\Users\Public\Favorites]
Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu]
Templates [C:\ProgramData\Microsoft\Windows\Templates]

Windows 7是否与Vista有同样的问题? 在Stack Overflow成员的帮助下,我知道在Vista上我可以使用CSIDL_APPDATA来启用文件访问而不会出现UAC问题或“访问被拒绝”错误。 这对Windows 7也有效吗?

1 个答案:

答案 0 :(得分:18)

这不是一个“问题”,它是一个功能。它被称为User Account Control (UAC),它是在Windows Vista下加强系统安全性的方法之一。 Windows 7确实保留了类似的安全模型。

首先,您的应用程序绝对没有理由需要弄乱系统文件夹。正如您已经了解到的,Windows为应用程序提供了许多临时和永久存储数据的位置。 Microsoft长期以来一直建议您利用这些文件夹:即使在以前版本的Windows下,它们也是存储数据的首选位置。您忽略了这个建议但是您的应用程序继续工作的事实实际上是错误。 Windows的后续版本最终关闭了该安全漏洞,从而破坏了您的应用程序,这一事实既不会出乎意料也不会被忽视。

您可以找到有关数据存储位置的更多信息on this page。另请参阅this blog article,它试图将技术文档数组汇总到一个方便的表中。与往常一样,Raymond Chen提供了一个简单而有启发性的概述,以了解各地点之间的差异:

  

“我的文档”和“应用程序数据”之间最重要的区别是“我的文档”是用户存储文件的位置,而“应用程序数据”是程序存储文件的位置。

     

换句话说,如果您在 CSIDL_MYDOCUMENTS (我的文档)中添加内容,您应该期望用户重命名,移动,删除,通过电子邮件发送给朋友,用户对其文件所做的各种事情。因此,那里的文件应该是用户将其识别为“他们的东西”的东西。他们创造的文件,他们下载的音乐,等等。

     

另一方面,如果您在 CSIDL_APPDATA (应用程序数据)中添加内容,则用户不太可能会弄乱它。这是您放置程序的支持数据的地方,这些数据不是您希望用户搞砸的,但仍应与用户关联。高分表,程序设置,自定义,拼写检查例外...

     

还有另一个名为 CSIDL_LOCAL_APPDATA 的目录(本地设置\应用程序数据),其作用类似于CSIDL_APPDATA,但如果用户个人资料漫游,则不会复制该目录。 (“本地设置”分支不会作为漫游用户配置文件的一部分进行复制。)将其视为每个用户的每台计算机存储位置。高速缓存和类似的非必要数据应该保留在这里,特别是如果它们很大的话。非漫游每用户数据的其他示例是您的%TEMP%和Internet临时文件目录。