【问题标题】:Does Windows 7 restrict folder access as Vista does?Windows 7 是否像 Vista 那样限制文件夹访问?
【发布时间】:2011-07-09 19:05:40
【问题描述】:

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

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

【问题讨论】:

  • 如果可以的话,“访问被拒绝”错误很可能不是由于操作系统问题,而更可能是由于应用程序设计不当造成的。如果您是该应用程序的作者,则不应武断地假设您可以在用户计算机上的任何位置进行编写,并且应该预见到在访问敏感资源时需要提升权限。
  • 谁投票关闭这个作为离题没有仔细阅读。这肯定与编程相关,我的回答是每个 Windows 开发人员必读

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


【解决方案1】:

这不是“问题”,而是一项功能。它被称为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% 和 Temporary Internet Files 目录是非漫游每用户数据的其他示例。

【讨论】:

  • +1 这不是 windows 的问题。问题出在程序上。
  • 一个非常常见的新手误解是程序设置可以保存在与可执行文件相同的目录中的文本文件(例如 INI 文件)中。这在概念上是错误的。一方面,这将使每个用户的设置变得不可能!但是由于 Windows Vista 的“虚拟存储”兼容性功能,行为不端的程序继续在 Vista 上运行,并且,此外,它们开始有效地使用每个用户的设置。这是对微软的+1(对任何抱怨它的人都是-1!)!。
猜你喜欢
  • 2017-08-29
  • 2010-11-19
  • 1970-01-01
  • 2011-02-25
  • 2011-04-25
  • 2012-07-23
  • 1970-01-01
  • 2022-10-06
  • 2010-12-13
相关资源
最近更新 更多