用于java安装的NSIS脚本

我想使用NSIS脚本安装Java,但我必须知道系统中是否安装了Java(Windows)。 基于注册码,我们如何检查是否安装了Java?

任何人都可以提供NSIS脚本来检查基于注册密钥的Java安装吗?

我没有编译它,但我会尝试跟随。 我根据如何在Windows上检测已安装的Sun JRE选择了注册表项? 。

;-------------------------------- ;Defines !define JavaRegKey 'HKLM "Software\JavaSoft\Java Runtime Environment" ""' ;-------------------------------- ;Installer Sections Section 'Java Runtime' SecJava SetOutPath '$TEMP' SetOverwrite on File 'c:\\javasetup.exe' ExecWait '$TEMP\javasetup.exe' $0 DetailPrint '..Java Runtime Setup exit code = $0' Delete '$TEMP\javasetup.exe' SectionEnd ;-------------------------------- ; Functions Function .onInit ReadRegStr $R0 ${JavaRegKey} StrCmp $R0 "" JavaMissing JavaFound JavaFound: !insertmacro UnselectSection ${SecJava} Goto JavaCheckDone JavaMissing: !insertmacro SelectSection ${SecJava} JavaCheckDone: FunctionEnd 

以下代码片段检查是否安装了Java(jre或jdk)。 如果未安装Java,则会安装它。 该脚本还在变量$JavaInstallationPath保存Java的路径。

 Var JavaInstallationPath Section "Find Java" FINDJAVA DetectTry1: StrCpy $1 "SOFTWARE\JavaSoft\Java Runtime Environment" StrCpy $2 0 ReadRegStr $2 HKLM "$1" "CurrentVersion" StrCmp $2 "" DetectTry2 JRE JRE: ReadRegStr $5 HKLM "$1\$2" "JavaHome" StrCmp $5 "" DetectTry2 GetValue DetectTry2: ReadRegStr $2 HKLM "SOFTWARE\JavaSoft\Java Development Kit" "CurrentVersion" StrCmp $2 "" NoJava JDK JDK: ReadRegStr $5 HKLM "SOFTWARE\JavaSoft\Java Development Kit\$2" "JavaHome" StrCmp $5 "" NoJava GetValue GetValue: StrCpy $JavaInstallationPath $5 Messagebox MB_OK "Javahome value: $JavaInstallationPath" Goto done NoJava: Messagebox MB_OK "No Java installation detected. Installing Java." # Install Java ExecWait "$INSTDIR\java\jre-6u26-windows-i586.exe" Goto DetectTry1 done: #$JavaInstallationPath should contain the system path to Java SectionEnd 

我想你也可以将上面的代码放在一个函数中,并在NSIS脚本中的任何地方调用它。

另一个使用在线jre安装程序和64/32位检查的示例

java min版本

 !define JRE_VERSION_6 "1.5" 

检查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 

版本比较

 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 

如果这个东西不见了,你会在nsis-wiki页面找到它