Windows 7是否像Vista那样限制文件夹访问?

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

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相同的问题? 在堆栈溢出的成员的帮助下,我知道在Vista上我可以使用CSIDL_APPDATA来启用文件访问而不存在UAC问题或“访问被拒绝”错误。 这是否也适用于Windows 7?

这不是一个“问题”,这是一个function。 这就是所谓的用户帐户控制(UAC) ,这是在Windows Vista系统安全性收紧的方式之一。 Windows 7确实保留了一个类似的安全模型。

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

您可以在此页面find有关在哪里存储数据的更多信息。 另请参阅此博客文章 ,该文章试图将技术文档的数组汇总到便捷的表格中。 和往常一样, Raymond Chen提供了一个简单而有益的概述:

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

换句话说,如果您在CSIDL_MYDOCUMENTS (我的文档)中添加了一些内容,您应该期望用户将其重命名,移动,删除,通过电子邮件发送给他们的朋友,以及用户使用他们的文件进行的各种操作。 因此,那些去那里的文件应该是用户认为是“他们的东西”的东西。 他们创造的文件,他们下载的音乐,类似的东西。

另一方面,如果你把东西放在CSIDL_APPDATA (应用程序数据)中,用户不太可能会搞砸了。 这就是你把你的程序的支持数据放在哪里,这些数据并不是你想让用户搞乱的东西,而是应该和用户联系起来。 高分表,程序设置,定制,拼写检查例外…

还有另一个名为CSIDL_LOCAL_APPDATA (本地设置\应用程序数据)的目录,就像CSIDL_APPDATA一样,除非用户configuration文件漫游时不会被复制。 (“本地设置”分支不作为漫游用户configuration文件的一部分进行复制。)将其视为每个用户每机器的存储位置。 caching和类似的非必要数据应该保存在这里,特别是如果它们很大。 非漫游每用户数据的其他示例是您的%TEMP%和Temporary Internet Files目录。