我正在尝试编写扩展安装程序,但必须找到必备应用程序的INSTALLDIR。先决条件应用程序随MSI一起安装。扩展安装程序正在使用Inno Setup。
有关我可以从何处获取此信息的任何提示?
我查看了Windows卸载注册表,但InstallLocation值为空。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{MY-PRODUCTID-GUID-HERE}]
"Comments"=""
"Contact"=""
"DisplayVersion"="1.0.0"
"HelpLink"=""
"HelpTelephone"=""
"InstallDate"="20111021"
"InstallLocation"=""
"InstallSource"="D:\\Documents\\Downloads\\"
"URLUpdateInfo"=""
"VersionMajor"=dword:00000001
"VersionMinor"=dword:00000000
"WindowsInstaller"=dword:00000001
"Version"=dword:01000000
"Language"=dword:00000409
"DisplayName"="MyApp (64-bit)"
答案 0 :(得分:2)
解决此问题的简单方法是尝试导航到先决条件的默认安装目录。如果找不到,请提示用户输入安装目录的路径。
我使用NSIS。所以,就这些而言,它是这样的:
Function .onInit
Pop $R1 ; "c:\\Program Files\ etc...."
# Check if it is installed
StrCmp $R1
MessageBox MB_OK|MB_ICONSTOP $(NotInstalled)
Abort
# It is installed so set INSTDIR
StrCpy $INSTDIR "$R1"
FunctionEnd
答案 1 :(得分:2)
MSI不会将程序包限制为只有一个安装目录,因此无法查询一个目录。如果要提供这样的可扩展性,请选择一个目录并将其写入注册表以供其他人查询。
答案 2 :(得分:0)
如果它不在那个位置,你可以要求主包的作者看看他们是否将路径存储在任何地方。如果没有,DevinBM的建议是唯一可行的方法。
答案 3 :(得分:0)
安装应用程序不需要将InstallLocation
写入Uninstall
注册表项,但是推荐。但是在开发安装包时你必须自己照顾它。
程序可以将此值写入注册表中自己的密钥,例如:HKLM\Software\MyApp
。
如果先决条件是你的,那么修改安装程序,使其将扩展名应安装到的目录写入注册表,suggested by Bob。