MSI忽略%programfiles%环境变量

时间:2013-10-20 06:37:44

标签: windows-installer program-files

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

为什么会这样做(我的意思是通常的做法是使用这个值,或者这是MSI构建器唯一暴露的值)?

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

1 个答案:

答案 0 :(得分:2)

Windows Installer公开ProgramFilesFolderProgramFiles64Folder属性。记录了行为,但实现却没有。你应该只依赖于属性,而不是其他技术。

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

有一种无证方法可以破坏这种行为。使用自定义操作获取目标文件夹并将其转换为短路径(C:\ Progra~1)。安装程序不会将此检测为无效并允许通过。使用此风险需要您自担风险。

相关问题