Files
quality_recticel/tray/ant/windows/nsis/Include/FindJava.nsh
Scheianu Ionut c7266c32ee Add custom QZ Tray fork with pairing key authentication
- Custom fork of QZ Tray 2.2.x with certificate validation bypassed
- Implemented pairing key (HMAC) authentication as replacement
- Modified files: PrintSocketClient.java (certificate check disabled)
- New files: PairingAuth.java, PairingConfigDialog.java
- Excluded build artifacts (out/, lib/javafx*) from repository
- Library JARs included for dependency management
2025-10-02 02:27:45 +03:00

143 lines
3.9 KiB
NSIS

!include FileFunc.nsh
!include LogicLib.nsh
!include x64.nsh
!include StrRep.nsh
!include IndexOf.nsh
!include StrTok.nsh
; Resulting variable
Var /GLOBAL java
Var /GLOBAL javaw
Var /GLOBAL java_major
; Constants
!define EXE "java.exe"
!define ADOPT "SOFTWARE\Classes\AdoptOpenJDK.jarfile\shell\open\command"
!define ECLIPSE "SOFTWARE\Classes\Eclipse Adoptium.jarfile\shell\open\command"
!define ECLIPSE_OLD "SOFTWARE\Classes\Eclipse Foundation.jarfile\shell\open\command"
!define JRE "Software\JavaSoft\Java Runtime Environment"
!define JRE32 "Software\Wow6432Node\JavaSoft\Java Runtime Environment"
!define JDK "Software\JavaSoft\JDK"
!define JDK32 "Software\Wow6432Node\JavaSoft\JDK"
; Macros
!macro _ReadEclipseKey
ClearErrors
ReadRegStr $0 HKLM "${ECLIPSE}" ""
StrCpy $0 "$0" "" 1 ; Remove first double-quote
${IndexOf} $1 $0 "$\"" ; Find the index of second double-quote
StrCpy $0 "$0" $1 ; Get the string section up to the index
IfFileExists "$0" Found
!macroend
!macro _ReadEclipseOldKey
ClearErrors
ReadRegStr $0 HKLM "${ECLIPSE_OLD}" ""
StrCpy $0 "$0" "" 1 ; Remove first double-quote
${IndexOf} $1 $0 "$\"" ; Find the index of second double-quote
StrCpy $0 "$0" $1 ; Get the string section up to the index
IfFileExists "$0" Found
!macroend
!macro _ReadAdoptKey
ClearErrors
ReadRegStr $0 HKLM "${ADOPT}" ""
StrCpy $0 "$0" "" 1 ; Remove first double-quote
${IndexOf} $1 $0 "$\"" ; Find the index of second double-quote
StrCpy $0 "$0" $1 ; Get the string section up to the index
IfFileExists "$0" Found
!macroend
!macro _ReadReg key
ClearErrors
ReadRegStr $0 HKLM "${key}" "CurrentVersion"
ReadRegStr $0 HKLM "${key}\$0" "JavaHome"
IfErrors +2 0
StrCpy $0 "$0\bin\${EXE}"
IfFileExists "$0" Found
!macroend
!macro _ReadPayload root path
ClearErrors
StrCpy $0 "${root}\${path}\bin\${EXE}"
IfFileExists $0 Found
!macroend
!macro _ReadWorking path
ClearErrors
StrCpy $0 "$EXEDIR\${path}\bin\${EXE}"
IfFileExists $0 Found
!macroend
!macro _ReadEnv var
ClearErrors
ReadEnvStr $0 "${var}"
StrCpy $0 "$0\bin\${EXE}"
IfFileExists "$0" Found
!macroend
; Create the shared function.
!macro _FindJava un
Function ${un}FindJava
; Snag payload directory off the stack
exch $R0
${If} ${RunningX64}
SetRegView 64
${EndIf}
; Check payload directories
!insertmacro _ReadPayload "$R0" "runtime"
; Check relative directories
!insertmacro _ReadWorking "runtime"
!insertmacro _ReadWorking "jre"
; Check common env vars
!insertmacro _ReadEnv "JAVA_HOME"
; Check registry
!insertmacro _ReadEclipseKey
!insertmacro _ReadEclipseOldKey
!insertmacro _ReadAdoptKey
!insertmacro _ReadReg "${JRE}"
!insertmacro _ReadReg "${JRE32}"
!insertmacro _ReadReg "${JDK}"
!insertmacro _ReadReg "${JDK32}"
; Give up. Use java.exe and hope it works
StrCpy $0 "${EXE}"
; Set global var
Found:
StrCpy $java $0
${StrRep} '$java' '$java' 'javaw.exe' '${EXE}' ; AdoptOpenJDK returns "javaw.exe"
${StrRep} '$javaw' '$java' '${EXE}' 'javaw.exe'
; Discard payload directory
pop $R0
; Detect java version
nsExec::ExecToStack '"$java" -version'
Pop $0
Pop $1
; Isolate version number, e.g. "1.8.0"
${StrTok} $0 "$1" "$\"" "1" "1"
; Isolate major version
${StrTok} $R0 "$0" "." "0" "1"
; Handle old 1.x.x version format
${If} "$R0" == "1"
${StrTok} $R0 "$0" "." "1" "1"
${EndIf}
; Convert to integer
IntOp $java_major $R0 + 0
FunctionEnd
!macroend
; Allows registering identical functions for install and uninstall
!insertmacro _FindJava ""
;!insertmacro _FindJava "un."