这不是一个“问题”,而是一个特性。它被称为用户帐户控制 (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 临时文件目录。