- 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
143 lines
3.9 KiB
NSIS
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." |