【发布时间】:2013-10-20 06:37:43
【问题描述】:
我正在安装一个 MSI 应用程序,忽略 %programfiles% 环境变量。从 procmon 跟踪来看,它似乎使用了 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir 的值。
为什么会这样做(我的意思是使用这个值是常见的做法,或者这是向 MSI 构建者公开的唯一值)?
当HKCU\Environment\ProgramFiles 和HKLM\System\CurrentControlSet\Control\Session Manager\Environment\ProgramFiles 可供使用时,为什么还会存在这个其他注册表值?
【问题讨论】:
-
不,它使用 SHGetKnownFolderPath()。由于 appcompat 原因保留了注册表项,太多程序读取注册表而不是使用 api 函数。改变 %ProgramFiles% 永远不会像你希望的那样做。
-
我不太确定读取注册表的问题是什么,而不是使用 API 函数,但我认为后者是一种更干净/错误检查/等方式。然而,有趣的是,该程序似乎同时检查了两者。可能超出范围,但是您知道如何安全地移动 Program Files 目录(参见support.microsoft.com/kb/933700/en-us)吗?
-
你说得对,这不是主题。在 superuser.com 上询问。如果您要编写一个移动 Program Files 目录的安装程序,那么您最好与 service like this 签约。
标签: windows-installer program-files