我有一个我正在安装的MSI'd应用程序,忽略了%programfiles%
环境变量。从procmon的踪迹来看,它似乎正在使用HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir
的值。MSI忽略%programfiles%环境变量
为什么会这样做(我的意思是使用这个值的常见做法,或者这是暴露给MSI构建者的唯一值)?
当HKCU\Environment\ProgramFiles
& HKLM\System\CurrentControlSet\Control\Session Manager\Environment\ProgramFiles
可供使用?为什么还有其他注册表值?
不,它使用SHGetKnownFolderPath()。由于appcompat的原因,注册表项被保留,太多的程序读取注册表而不是使用api函数。改变%ProgramFiles%是永远不会做你希望它会做的。 –
我不太清楚读取注册表时出现什么问题,而不是使用API函数,但我认为后者是更干净/错误检查/等方式。然而,有趣的是,该程序似乎正在检查两者。可能超出范围,但是您是否知道如何安全地移动Program Files目录(请参阅http://support.microsoft.com/kb/933700/en-us)? – user66001
你是对的,这是关键的问题。询问superuser.com。如果您要编写一个移动Program Files目录的安装程序,那么您最好签署一个[像这样的服务](http://www.bodyguardservice.net/eng/index.html)。 –