2

我有一个正在安装的 MSI 应用程序,忽略了%programfiles%环境变量。从 procmon 跟踪来看,它似乎使用的是 的值HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir

为什么会这样做(我的意思是使用这个值是常见的做法,或者这是向 MSI 构建者公开的唯一值)?

为什么这个其他注册表值存在,什么时候HKCU\Environment\ProgramFiles&HKLM\System\CurrentControlSet\Control\Session Manager\Environment\ProgramFiles可以使用?

4

1 回答 1

3

Windows 安装程序公开ProgramFilesFolderProgramFiles64Folder属性。行为已记录,但实施未记录。您应该只依赖属性而不依赖其他技术。

正式地,您需要使用 ProgramFiles64Folder 属性的 64 位 MSI 才能转到 64 位计算机上的 C:\Program Files\。即使您使用自定义操作在 32 位 MSI 中将您的目录显式设置为此路径,安装程序也会截获该路径并将其重定向到它认为的预期目录。这是出于应用程序兼容性的目的。

有一种未公开的方式来颠覆这种行为。使用自定义操作获取预期文件夹并将其转换为短路径 (C:\Progra~1)。安装程序不会将其检测为无效,并将允许它通过。使用它需要您自担风险。

于 2013-10-20T14:32:58.053 回答