【问题标题】:Where is the guideline that says you shouldn't write to the Program Files area?说明您不应该写入 Program Files 区域的指南在哪里?
【发布时间】:2012-10-31 17:32:52
【问题描述】:

关于 SO 的许多问题都说“Windows 开发人员指南”或“Windows 设计指南”说您不应该将临时数据或程序数据写入 Program Files 区域,但据我所知,它们都没有真正链接到一段说明了这么多的文档。搜索 MSDN 没有产生任何结果。 Windows 将使该区域成为只读区域,因此它可以由操作系统强制执行,但这并不意味着开发人员无论如何都不会尝试在那里写入(例如,在移植旧版本、XP 和更早版本的程序时。)

我意识到在 Windows 开发的晚期才问这个问题似乎很奇怪(因为正如下面的评论者所指出的那样,操作系统已经强制执行了十多年),但有时需要一份说明这一点的文件满足人们的需求。

考虑到这一点,Microsoft 是否已发布文档说明我们不应将应用程序数据写入 Program Files 区域,如果是,它在哪里?

【问题讨论】:

  • 这不仅仅是一个指南 - 您的程序将无权访问该目录,除非它被提升。
  • 此外,自 Windows 2000 以来,该要求已通过 ACL 对“普通用户”强制执行,因此这几乎不是新闻……
  • 谁能告诉微软 SQL Server 团队这个想法。

标签: windows


【解决方案1】:

来自Windows 7 客户端软件徽标计划的技术要求

默认安装到正确的文件夹

用户应该在默认情况下获得一致且安全的体验 文件的安装位置,同时保持选项 将应用程序安装到他们选择的位置。也是 有必要将应用程序数据存储在正确的位置以允许 几个人使用同一台计算机而不会损坏或 覆盖彼此的数据和设置。


Windows 提供文件系统中的特定位置来存储 程序和软件组件、共享的应用程序数据,以及 特定于用户的应用程序数据:

  • 默认情况下应将应用程序安装到 Program Files 文件夹。 不得将用户数据或应用程序数据存储在此 位置,因为为此配置了安全权限 文件夹强调
  • 必须在计算机上的用户之间共享的所有应用程序数据都应存储在 ProgramData 中
  • 特定用户专有且不与计算机的其他用户共享的所有应用程序数据必须存储在 用户\\AppData
  • 切勿直接写入“Windows”目录和/或子目录。使用正确的方法安装文件,例如 字体或驱动程序
  • 在“每台机器”安装中,用户数据必须在首次运行时写入,而不是在安装期间写入。这是因为没有 正确的用户位置以在安装时存储数据。尝试 由应用程序修改机器上的默认关联行为 水平安装后将不成功。相反,默认值必须 在每个用户级别上声明,这可以防止多个用户 覆盖彼此的默认值。

而且我很确定,可以追溯到 Windows NT 4 甚至更早版本的每个 Windows 版本的 NT 家族都有类似的东西。


另见this question


编辑:本文中指向 Windows 7 徽标程序的原始链接已不复存在。在这里,您可以找到指向 Certification requirements for Windows Desktop Apps 的当前链接。请参阅第 10 节,默认情况下应用程序必须安装到正确的文件夹

【讨论】:

    【解决方案2】:

    在更高版本的 Windows(Vista、7,当然还有服务器版本)中,“特殊文件夹”(包括“程序文件”)的访问权限受到限制。即使你的程序被提升到有足够的权限写入这个文件夹,这仍然是一个坏主意。

    我不知道有任何说明这一点的准则,但有 a list of special folders 以及它们的用途。事实上,我可以为几乎所有类型的数据创建一个特殊文件夹,这意味着无需使用程序文件文件夹。

    【讨论】:

    • “更高版本”?从 Windows 2000 开始,普通用户不能在“程序文件”中写入,即使在 NT 上也不鼓励。在 Vista 之前,人们一直在“程序文件”中写作,因为 Microsoft/OEM 出于与 Windows 9x 的兼容性和“传统原因”,默认情况下向用户授予了管理员访问权限。
    • 好吧,我老了...信不信由你 Windows 2000 是较新的版本之一 ;-) 无论如何,我怀疑这些新的细微差别并不是 OP 真正要问的,我所做的只是试图提供帮助。
    • 你是对的,如果我显得粗鲁,我很抱歉,我不是故意的 :) 。只是我在这个问题上很容易生气,因为我听到太多关于 Vista 中这种“变化”的抱怨,而自 Windows 2000 以来,表现良好的应用程序应该能够处理它(如果他们想要更早的话,甚至更早)在许多企业场景中表现出色)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    相关资源
    最近更新 更多