5

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

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 也有效吗?

4

1 回答 1

19

这不是一个“问题”,而是一个特性。它被称为用户帐户控制 (UAC),它是在 Windows Vista 下加强系统安全性的方法之一。Windows 7 确实保留了类似的安全模型。

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

您可以在此页面上找到有关将数据存储在何处的更多信息。另请参阅此博客文章,该文章试图将一系列技术文档汇总到一个方便的表格中。和往常一样,Raymond Chen提供了一个简单但有启发性的关于位置之间差异的概述:

我的文档和应用程序数据之间最重要的区别在于,我的文档是用户存储文件的地方,而应用程序数据是程序存储文件的地方。

换句话说,如果您在CSIDL_MYDOCUMENTS(我的文档)中放入某些内容,您应该期望用户对其进行重命名、移动、删除、通过电子邮件将其发送给他们的朋友,以及用户对其文件所做的所有类型的事情。因此,去那里的文件应该是用户将识别为“他们的东西”的东西。他们创建的文档,他们下载的音乐,诸如此类。

另一方面,如果您将某些内容放入CSIDL_APPDATA(应用程序数据)中,则用户不太可能弄乱它。这是您放置程序的支持数据的地方,这些数据实际上并不是您希望用户弄乱的东西,但仍应与用户相关联。高分表、程序设置、自定义、拼写检查例外...

还有另一个名为CSIDL_LOCAL_APPDATA(Local Settings\Application Data) 的目录,它的作用类似于CSIDL_APPDATA,但如果用户配置文件漫游,则不会复制它。(“本地设置”分支不会作为漫游用户配置文件的一部分复制。)将其视为每用户每机器的存储位置。缓存和类似的非必要数据应保留在这里,尤其是在它们很大的情况下。非漫游的每用户数据的其他示例是您的%TEMP%和 Internet 临时文件目录。

于 2011-03-06T13:05:04.490 回答