Java Launcher: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
mNo edit summary
Line 15: Line 15:


Have fun! (can you believe people want you to pay for this!)
Have fun! (can you believe people want you to pay for this!)
Muhammet Çakmak


== The Script ==
== The Script ==

Revision as of 15:46, 29 March 2009

Author: Baz (talk, contrib)


Description

Here is a NSIS script which can be used to launch Java programs the easy way.

It will search for the JRE the following way:

 1 - in jre directory (if you have JRE Installed with your application)
 2 - in JAVA_HOME environment variable
 3 - in the registry
 4 - assume java.exe in current dir or PATH

In this example NSIS is not used as an installer but as a windows program.

There's no programming language out there in which it can be done this simple!

Have fun! (can you believe people want you to pay for this!)

Muhammet Çakmak

The Script

; Java Launcher
;--------------
 
Name "Java Launcher"
Caption "Java Launcher"
Icon "Java Launcher.ico"
OutFile "Java Launcher.exe"
 
SilentInstall silent
AutoCloseWindow true
ShowInstDetails nevershow
 
!define CLASSPATH ".;lib;lib\myJar"
!define CLASS "org.me.myProgram"
 
Section ""
  Call GetJRE
  Pop $R0
 
  ; change for your purpose (-jar etc.)
  StrCpy $0 '"$R0" -classpath "${CLASSPATH}" ${CLASS}'
 
  SetOutPath $EXEDIR
  Exec $0
SectionEnd
 
Function GetJRE
;
;  returns the full path of a valid java.exe
;  looks in:
;  1 - .\jre directory (JRE Installed with application)
;  2 - JAVA_HOME environment variable
;  3 - the registry
;  4 - hopes it is in current dir or PATH
 
  Push $R0
  Push $R1
 
  ; use javaw.exe to avoid dosbox.
  ; use java.exe to keep stdout/stderr
  !define JAVAEXE "javaw.exe"
 
  ClearErrors
  StrCpy $R0 "$EXEDIR\jre\bin\${JAVAEXE}"
  IfFileExists $R0 JreFound  ;; 1) found it locally
  StrCpy $R0 ""
 
  ClearErrors
  ReadEnvStr $R0 "JAVA_HOME"
  StrCpy $R0 "$R0\bin\${JAVAEXE}"
  IfErrors 0 JreFound  ;; 2) found it in JAVA_HOME
 
  ClearErrors
  ReadRegStr $R1 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" "CurrentVersion"
  ReadRegStr $R0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$R1" "JavaHome"
  StrCpy $R0 "$R0\bin\${JAVAEXE}"
 
  IfErrors 0 JreFound  ;; 3) found it in the registry
  StrCpy $R0 "${JAVAEXE}"  ;; 4) wishing you good luck
 
 JreFound:
  Pop $R1
  Exch $R0
FunctionEnd

once you get this working, do check out A slightly better Java Launcher and Java Launcher with automatic JRE installation.