【问题标题】:Difference between Program Files and ProgramData?程序文件和程序数据之间的区别?
【发布时间】:2015-02-14 08:03:40
【问题描述】:

如何确定我的应用程序的哪些文件进入 Program Files (FOLDERID_ProgramFilesX64),哪些进入 ProgramData? (FOLDERID_ProgramData)?我不明白将我的应用程序的固定文件分成这两个类别的原因是什么,或者我应该如何决定哪个文件放在哪个类别中。

例如 - 我的应用程序显示的图像文件,它们是“程序”还是“数据”?

把所有东西都放在一个或另一个之下有什么问题吗?

该应用程序是为所有用户安装的,没有用户特定的配置文件或数据。

【问题讨论】:

  • 注意-到目前为止,我从谷歌搜索的理解是 ProgramData 实际上是指应用程序在运行时不应该更改的文件(尽管如果应用程序也有需要更改的文件在运行时,而不是基于每个用户,那么安装程序必须在 ProgramData 下设置 ACL 以允许这样做)。
  • 每台机器上相同的文件应该放在 Program Files 中。在运行时而不是在安装时生成的全局文件必须放在 ProgramData 中,尽管除非绝对必要,否则应避免这样做。在每台机器上不同但在安装时生成的文件可以放在任何一个地方,但 ProgramData 可能更可取。
  • 它用处不大,没有人真的想支持用户可以在没有备份机制的情况下覆盖彼此的文件的安装。仅适用于由多个程序或运行提升的程序使用的只读文件。如果您的图像文件是一个漂亮的大图像,例如多个程序显示在它们的初始屏幕中,那么它非常有用。倾向于被安装程序滥用,其中一些使整个目录可写。
  • @HansPassant:“很少使用”我想是相对的,但是有不少主流产品使用它;我的机器有 Microsoft Help、Adobe Acrobat、Adobe AIR、Minitab、Firefox、Skype 和 Symantec Endpoint Protection 等文件夹。请注意,我并不是说他们应该这样做。

标签: windows-7 installation


【解决方案1】:

Program Files 用于作为安装一部分的可执行文件和其他静态文件。 ProgramData 用于在执行期间生成的与用户无关的数据,例如共享缓存、共享数据库、共享设置、共享首选项等。特定于用户的数据位于 AppData 文件夹中。请注意,这些是针对非用户可见的数据。用户可见的数据属于文档文件夹(或音乐、视频、自定义同级文件夹等)。

详情请见Special Folders and Custom Folders。请注意,此处文档中使用的名称、文件夹名称以及用于从系统获取这些路径的各种枚举所使用的名称之间使用的术语略有不同。

【讨论】:

  • 正如this thread 中所讨论的那样,ProgramData 在 Windows 7 中默认为应用程序在运行时不可写。因此安装程序必须执行 ACL hack 并为其在 ProgramData 下的文件夹提供全局可写权限;所有这些都表明,实际上它并不是按您所说的方式使用的,因此我感到困惑!
  • 我已经编辑澄清——ProgramData 用于在所有用户帐户之间共享的数据。用户特定数据还有另一个位置 (AppData)。请参阅我添加的链接以获取完整的详细信息。是的,低权限用户可能无权编辑共享数据。
  • 我还是没跟上。如果非管理员用户正在运行应用程序,那么应用程序是否会要求 UAC 提升以写入其共享缓存?
  • 是的。跨用户共享的缓存和设置通常很少见。由于更改这些可能会影响其他用户,因此需要 UAC 提升。这类似于操作系统为防止一个坏程序从另一个进程读取数据或将数据写入另一个进程而实施的保护措施。不同类型数据的分离允许开发人员决定哪些项目应该共享,哪些不应该共享。缓存通常可以包含用户特定的数据,这些数据不应该被其他用户读取。
  • ProgramData 目录的权限(以及子目录的默认权限)允许任何用户创建新的目录和文件。这意味着您可以在运行时创建目录而无需提升,因此您的安装程序不需要为您执行此操作。文件的默认权限允许任何人读取它们,但只有创建者可以写入它们。另一个帖子上的答案是错误的。
猜你喜欢
  • 2013-10-18
  • 2012-07-05
  • 2010-10-15
  • 2011-07-17
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多