I want to install Java using an NSIS script, but i have to know whether Java is installed or not in the system (Windows). based on the register keys how can we check if Java
Another example with online jre installer and 64/32 bit check
java min version
!define JRE_VERSION_6 "1.5"
check function
Function DetectJRE
;64bit jre und jdk check
SetRegView 64
ReadRegStr $2 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" \
"CurrentVersion"
;StrCmp $2 ${JRE_VERSION_6} done
${VersionCompare} $2 ${JRE_VERSION_6} $R0
StrCmp $R0 "1" done
ReadRegStr $2 HKLM "SOFTWARE\JavaSoft\Java Development Kit" \
"CurrentVersion"
;StrCmp $2 ${JRE_VERSION_6} done
${VersionCompare} $2 ${JRE_VERSION_6} $R0
StrCmp $R0 "1" done
;32bit jre und jdk check
SetRegView 32
ReadRegStr $2 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" \
"CurrentVersion"
;StrCmp $2 ${JRE_VERSION_6} done
${VersionCompare} $2 ${JRE_VERSION_6} $R0
StrCmp $R0 "1" done
ReadRegStr $2 HKLM "SOFTWARE\JavaSoft\Java Development Kit" \
"CurrentVersion"
;StrCmp $2 ${JRE_VERSION_6} done
${VersionCompare} $2 ${JRE_VERSION_6} $R0
StrCmp $R0 "1" done
Call GetJRE
done:
FunctionEnd
version compare
Function VersionCompare
!define VersionCompare `!insertmacro VersionCompareCall`
!macro VersionCompareCall _VER1 _VER2 _RESULT
Push `${_VER1}`
Push `${_VER2}`
Call VersionCompare
Pop ${_RESULT}
!macroend
Exch $1
Exch
Exch $0
Exch
Push $2
Push $3
Push $4
Push $5
Push $6
Push $7
begin:
StrCpy $2 -1
IntOp $2 $2 + 1
StrCpy $3 $0 1 $2
StrCmp $3 '' +2
StrCmp $3 '.' 0 -3
StrCpy $4 $0 $2
IntOp $2 $2 + 1
StrCpy $0 $0 '' $2
StrCpy $2 -1
IntOp $2 $2 + 1
StrCpy $3 $1 1 $2
StrCmp $3 '' +2
StrCmp $3 '.' 0 -3
StrCpy $5 $1 $2
IntOp $2 $2 + 1
StrCpy $1 $1 '' $2
StrCmp $4$5 '' equal
StrCpy $6 -1
IntOp $6 $6 + 1
StrCpy $3 $4 1 $6
StrCmp $3 '0' -2
StrCmp $3 '' 0 +2
StrCpy $4 0
StrCpy $7 -1
IntOp $7 $7 + 1
StrCpy $3 $5 1 $7
StrCmp $3 '0' -2
StrCmp $3 '' 0 +2
StrCpy $5 0
StrCmp $4 0 0 +2
StrCmp $5 0 begin newer2
StrCmp $5 0 newer1
IntCmp $6 $7 0 newer1 newer2
StrCpy $4 '1$4'
StrCpy $5 '1$5'
IntCmp $4 $5 begin newer2 newer1
equal:
StrCpy $0 0
goto end
newer1:
StrCpy $0 1
goto end
newer2:
StrCpy $0 2
end:
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
FunctionEnd
getJre
Function GetJRE
MessageBox MB_YESNO "XXXXXX require at least Java 1.5! Do you want to download and install it now?" IDYES doInstall
Abort
doInstall:
StrCpy $2 "$TEMP\Java Runtime Environment.exe"
nsisdl::download /TIMEOUT=30000 ${JRE_URL} $2
Pop $R0 ;Get the return value
StrCmp $R0 "success" +3
MessageBox MB_OK "Download failed: $R0"
Quit
ExecWait $2
Delete $2
Call DetectJRE
FunctionEnd
if theire is something missing you will find it at nsis-wiki page