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.
精彩评论