NSIS - 在x64系统上检测java安装的问题

时间:2011-08-18 20:00:19

标签: java service nsis

我有一个NSIS安装程序,在某一点上必须检查系统中是否安装了java,如果没有,则必须以静默方式安装它。它还必须返回java的路径,因为我必须创建JAVA_HOME环境变量。

这是我编写的用于检查java安装并在变量中保存java路径的函数:

Var JavaInstallationPath
Function FindJava 
    StrCpy $1 "SOFTWARE\JavaSoft\Java 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 "SOFTWARE\JavaSoft\Java Development Kit" "CurrentVersion"  
     ${If} $2 == ""
        Goto NoJava
    ${Else}
        ReadRegStr $5 HKLM "SOFTWARE\JavaSoft\Java 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 "$INSTDIR\temp\jre-6u26-windows-i586.exe"    
    # get jre path value after installation
    StrCpy $1 "SOFTWARE\JavaSoft\Java 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 "$INSTDIR\Application\install\install_service.rb"' 

.rb文件里面的内容不会产生问题,因为我试图硬编码java的路径,一切正常“

但是,一切都适用于32位操作系统。但是,当我在64位系统上运行安装程序时,该服务将无法启动,返回错误1067.

起初我认为FindJava函数无法正常工作,导致服务安装错误,但我将所有结果发送到消息框中,它们完全符合预期。

不幸的是,问题实际上就在于这个功能。我删除了该函数,我已经硬编码了$ JavaInstallationPath,安装程序也运行了。

我真的不知道出了什么问题。 请帮忙。

1 个答案:

答案 0 :(得分:1)

  

但是,一切都适用于32位操作系统。但,   当我在64位系统上运行安装程序时,该服务将无法启动,   返回错误1067。

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运行时,它可能根本不会运行。