我一直在尝试检测我的NSIS脚本中是否在主机系统上安装了Tomcat。这是执行此操作的部分
Section Tomcat
ClearErrors
Var /GLOBAL tomcatVersion
ReadRegStr $tomcatVersion HKLM "SOFTWARE\Apache Software Foundation\Tomcat\7.0\Tomcat7" "InstallPath"
;ExecWait "$EXEDIR\apache-tomcat-7.0.22.exe"
DetailPrint "$tomcatVersion"
SectionEnd
当我转到“regedit”并检查该特定键的路径时,它有一个值,但print语句返回一个空白。
有人可以建议解决此问题的最佳方法和/或我可能遇到的任何错误吗?
我注意到有一件有趣的事情,如果在上面的代码中,如果我指向ReadRegStr命令来读取
HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" "CurrentVersion"
它返回一个值,从语法上讲,代码确实有效。
答案 0 :(得分:1)
如果Tomcat安装程序是64位安装程序,那么32位进程将找不到该密钥,在NSIS中您可以使用SetRegView 64
。
如果您在脚本中使用RequestExectionLevel
并且UAC虚拟化了Tomcat安装程序,那么您必须从VirtualStore读取它(不太可能在您的情况下,因为您可以看到密钥注册表编辑器)
Process Monitor也可以方便地调试注册表问题......
答案 1 :(得分:0)
派对有点晚了,但如果你谷歌为“nsis安装tomcat”这个帖子出现了,所以我想我会分享这个我发现的好例子......
https://github.com/mathiaslin/openmrs-pgh-190/blob/master/metadata/installer/installer_setup.nsh