NSIS – 在x64系统上检测java安装的问题
我有一个NSIS安装程序,在某一点上必须检查系统中是否安装了
java,如果没有,它必须以静默方式安装它.它还必须返回java的路径,因为我必须创建JAVA_HOME环境变量.
这是我编写的用于检查java安装并在变量中保存java路径的函数: Var JavaInstallationPath Function FindJava StrCpy $1 "SOFTWAREJavaSoftJava Runtime Environment" StrCpy $2 0 ReadRegStr $2 HKLM "$1" "CurrentVersion" ${If} $2 == "" Goto DetectTry2 ${Else} ReadRegStr $5 HKLM "$1$2" "JavaHome" ${If} $5 == "" Goto DetectTry2 ${Else} StrCpy $JavaInstallationPath $5 Messagebox MB_OK "Javahome value: $JavaInstallationPath" ${EndIf} ${EndIf} DetectTry2: ReadRegStr $2 HKLM "SOFTWAREJavaSoftJava Development Kit" "CurrentVersion" ${If} $2 == "" Goto NoJava ${Else} ReadRegStr $5 HKLM "SOFTWAREJavaSoftJava Development Kit$2" "JavaHome" ${If} $5 == "" Goto NoJava ${Else} StrCpy $JavaInstallationPath $5 Messagebox MB_OK "Javahome value: $JavaInstallationPath" ${EndIf} ${EndIf} NoJava: Messagebox MB_OK "No Java installation detected. Installing Java." # Install Java Messagebox MB_OK "Running x32" ExecWait "$INSTDIRtempjre-6u26-windows-i586.exe" # get jre path value after installation StrCpy $1 "SOFTWAREJavaSoftJava Runtime Environment" StrCpy $2 0 ReadRegStr $2 HKLM "$1" "CurrentVersion" ReadRegStr $5 HKLM "$1$2" "JavaHome" StrCpy $JavaInstallationPath $5 Messagebox MB_OK "Java installation path: $JavaInstallationPath" FunctionEnd 稍后在安装程序中,我安装了一个运行ruby脚本的服务: nsExec::ExecToLog 'jruby "$INSTDIRApplicationinstallinstall_service.rb"' (.rb文件里面的内容不会产生问题,因为我试图硬编码java的路径,一切正常) 但是,一切都适用于32位操作系统.但是,当我在64位系统上运行安装程序时,该服务将无法启动,返回错误1067. 起初我认为FindJava函数不能正常工作并导致服务的安装错误,但我将所有结果发送到消息框中,它们完全符合预期. 不幸的是,问题实际上就在于这个功能.我删除了该函数,我已经硬编码$JavaInstallationPath,并且安装程序正常工作. 我真的不知道出了什么问题. 解决方法
Windows退出代码1067指的是“进程意外终止”.见http://www.chicagotech.net/troubleshooting/exitcode2.htm 我尝试检查在Windows 64位上运行JRuby是否有任何问题,并且有!检查此链接: http://hype-free.blogspot.com/2011/09/running-jruby-on-64-bit-windows.html 但是,我认为如果JRuby .jar依赖于当前安装的Java运行时来使其运行但是没有安装Java运行时,它可能根本不运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |