NSIS script for java installation

前端 未结 3 1533
自闭症患者
自闭症患者 2020-12-19 04:40

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

3条回答
  •  攒了一身酷
    2020-12-19 05:16

    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

提交回复
热议问题