我正在安装MSI的应用程序,忽略了%programfiles%
环境变量。从procmon跟踪,它似乎使用了HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir
的值。
为什么会这样做(我的意思是通常的做法是使用这个值,或者这是MSI构建器唯一暴露的值)?
为什么这个其他注册表值存在,HKCU\Environment\ProgramFiles
& HKLM\System\CurrentControlSet\Control\Session Manager\Environment\ProgramFiles
可以使用吗?
答案 0 :(得分:2)
Windows Installer公开ProgramFilesFolder和ProgramFiles64Folder属性。记录了行为,但实现却没有。你应该只依赖于属性,而不是其他技术。
正式地,您需要使用ProgramFiles64Folder属性的64位MSI转到64位计算机上的C:\ Program Files \。即使您使用自定义操作在32位MSI中将目录显式设置为此路径,安装程序也会拦截该路径并将其重定向到它认为的目标目录。这是出于应用程序兼容性目的。
有一种无证方法可以破坏这种行为。使用自定义操作获取目标文件夹并将其转换为短路径(C:\ Progra~1)。安装程序不会将此检测为无效并允许通过。使用此风险需要您自担风险。