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

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
如果可以的话,“访问被拒绝”的错误很可能不是由操作系统问题引起的,而更可能是因为应用程序设计不良所致。如果您是该应用程序的作者,就不应随意假定自己可以在用户的计算机上任意写入,并且在访问敏感资源时应预先考虑权限提升的需求。 - madd0
1
投票将此问题关闭为离题的人显然没有仔细阅读。这绝对与编程有关,我的答案对于每个Windows开发人员来说都是必读的。 - Cody Gray
1个回答

19
"问题" 不是问题,它是一个特性。它被称为用户账户控制 (UAC),是在Windows Vista下加强系统安全的一种方式。Windows 7确实保留了类似的安全模型。
你的应用程序根本没有理由需要混乱地操作系统文件夹。正如你已经学到的那样,Windows为应用程序提供了许多位置来存储数据,无论是临时还是永久的。 Microsoft长期以来一直建议您利用这些文件夹:即使在先前的Windows版本中,它们也是存储数据的首选位置。您忽视了这个建议,但您的应用程序仍然可以工作,这实际上是一个漏洞。晚些时候的Windows版本终于关闭了这个安全漏洞,从而破坏了您的应用程序,这既不意外也不令人感激。
您可以在此页面找到更多关于存储数据的信息。还可以参考这篇博客文章,它试图将各种技术文档总结成一个方便的表格。并且一如既往地,Raymond Chen提供了简单而有启发性的概述,介绍了这些位置之间的差异:

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

换句话说,如果你把一些东西放在CSIDL_MYDOCUMENTS(我的文档)中,你应该期望用户会对它进行重命名、移动、删除、通过电子邮件发送给他们的朋友,以及所有用户处理他们文件时做的各种事情。因此,放在这里的文件应该是用户能够识别为“自己的东西”的文档、音乐等。

另一方面,如果你把一些东西放在CSIDL_APPDATA(应用程序数据)中,用户就不太可能去干涉它。这是你放置程序支持数据的地方,而这些数据并不是你希望用户去干预的内容,但它们仍然应该与用户相关联,例如高分表、程序设置、自定义内容、拼写检查例外等。

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


6
+1 这不是Windows系统的问题,而是程序本身存在问题。 - David Heffernan
5
一个非常普遍的初学者误解是程序设置可以保存在与可执行文件相同的文本文件中(例如INI文件)。这在概念上是错误的。首先,这将使每个用户的设置不可能实现!但由于Windows Vista的“虚拟存储”兼容性功能,行为不端的程序继续在Vista上工作,并且它们开始使用逐用户设置。这实际上增加了1分给Microsoft(减少了任何对此有抱怨的人的1分)! - Andreas Rejbrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接