我有一個我正在安裝的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)。 –