开发者

NSIS - problems detecting java installation on x64 systems

I have a NSIS installer that at a point has to check if java is installed in the system, and, if not, it has to install it silently. It also have to return the path to java, because I have to create JAVA_HOME environment variable.

This is the function that I have wrote to check java installation and save the path to java in a variable:

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  

Later in the installer I install a service running a ruby script:

nsExec::ExecToLog 'jruby "$INSTDIR\Application\install\install_service.rb"' 

(what is inside that .rb file does not create problems, because I have tried to hardcode the path to java, and everything worked ok)

However, everything works perfectly on 32-bit operating systems. But, when I run the installer on 64-bit systems, that service won't start, returning error 1067开发者_如何学C.

At first I thought that FindJava function doesn't work correctly and it causes a faulty installation of the service, but I sent all the results in messageboxes and they are exactly as expected.

Unfortunately, the problem is really in that function. I removed the function, I have hardcoded $JavaInstallationPath, and the installer worked.

I really don't know what is wrong. Please, help.


However, everything works perfectly on 32-bit operating systems. But, when I run the installer on 64-bit systems, that service won't start, returning error 1067.

Windows exit code 1067 refers to "The process terminated unexpectedly." See http://www.chicagotech.net/troubleshooting/exitcode2.htm

I try to check whether there is any issue running JRuby on Windows 64-bit and there is! Check this link:

http://hype-free.blogspot.com/2011/09/running-jruby-on-64-bit-windows.html

But, I do think that if JRuby .jar depends on currently installed Java runtime to make it run but there is no Java runtime installed, it may not run at all.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜