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