Windows 7 程序文件和程序数据之间的区别?

Windows 7 程序文件和程序数据之间的区别?,windows-7,installation,Windows 7,Installation,如何确定应用程序的哪些文件放在程序文件(FOLDERID\u programmfiles64)中,哪些放在程序数据中?(FOLDERID\u程序数据)?我不明白将我的应用程序的固定文件分为这两类的原因是什么,或者我应该如何决定哪个文件放在哪个目录中 例如,我的应用程序显示的图像文件是“程序”还是“数据” 把所有东西都放在其中一个下面有什么问题吗 该应用程序是为所有用户安装的,没有用户特定的配置文件或数据。程序文件用于安装过程中附带的可执行文件和其他静态文件。ProgramData用于执行过程中生

如何确定应用程序的哪些文件放在程序文件(
FOLDERID\u programmfiles64
)中,哪些放在程序数据中?(
FOLDERID\u程序数据
)?我不明白将我的应用程序的固定文件分为这两类的原因是什么,或者我应该如何决定哪个文件放在哪个目录中

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

把所有东西都放在其中一个下面有什么问题吗


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

程序文件用于安装过程中附带的可执行文件和其他静态文件。ProgramData用于执行过程中生成的与用户无关的数据,如共享缓存、共享数据库、共享设置、共享首选项等。特定于用户的数据位于AppData文件夹中。请注意,这些用于非用户可见的数据。用户可见数据属于文档文件夹(或音乐、视频、自定义同级文件夹等)


有关详细说明,请参阅。请注意,所使用的术语在此处文档中使用的名称、文件夹名称和,以及用于从系统获取这些路径的各种枚举所使用的名称。

注意-到目前为止,我通过谷歌搜索的理解是,
ProgramData
实际上指的是应用程序在运行时不应更改的文件(虽然如果应用程序也有需要在运行时更改的文件,而不是基于每个用户,那么安装程序必须在ProgramData下设置ACL以允许此操作).在每台计算机上相同的文件应放在程序文件中。在运行时而不是在安装时生成的全局文件必须放在ProgramData中,但除非绝对必要,否则应避免这样做。在每台计算机上不同但在安装时生成的文件可以放在任何位置,但ProgramDatata可能更可取。它没有什么用处,没有人真的希望支持这样的安装,即用户可以在没有备份机制的情况下覆盖彼此的文件。仅适用于多个程序或运行提升的程序使用的只读文件。如果图像文件是多个程序显示的大而漂亮的图像,那么它非常有用例如,在它们的启动屏幕中。安装程序往往会滥用它们,其中一些会使整个目录可写。@HansPassant:“没什么用处”我想是相对的,但有相当多的主流产品使用它;我的机器有Microsoft Help、Adobe Acrobat、Adobe AIR、Minitab、Firefox、Skype和Symantec Endpoint Protection等文件夹。请注意,我并不是说他们应该这样做。正如前面所讨论的,ProgramData默认情况下不能由Windows 7中运行时的应用程序。因此,安装程序必须进行ACL攻击,并为其在ProgramData下的文件夹授予世界可写权限;所有这一切都表明,实际上它并不是按照您所说的方式使用的,因此我感到困惑!我编辑以澄清——ProgramData用于所有用户帐户共享的数据。还有一个其他位置(AppData)有关用户特定的数据。请参阅我添加的链接以了解完整详细信息。是的,较低权限的用户可能没有编辑共享数据的权限。我仍然没有遵循。如果非管理员用户正在运行应用程序,则应用程序是否要求UAC elevation写入其共享缓存?是的。跨用户共享的缓存和设置通常是很少见的事情。因为更改这些内容可能会影响其他用户,所以需要UAC提升。这类似于操作系统为防止一个坏程序从另一个进程读取数据或向另一个进程写入数据而设置的保护措施。不同类型数据的分离允许开发人员决定应该共享哪些项目,以及ich不应该。缓存通常可以包含用户特定的数据,其他用户不应该能够读取这些数据。ProgramData目录上的权限(以及子目录上的默认权限)允许任何用户创建新的目录和文件。这意味着您可以在运行时创建一个目录而不进行提升,因此安装程序无需为您执行此操作。文件的默认权限允许任何人读取它们,但只有创建者可以对其进行写入。另一个线程上的答案是错误的。