Difference between revisions of "Java"

From WPKG | Open Source Software Deployment and Distribution
Jump to: navigation, search
(Updated with: Java Runtime Environment (JRE) 6 Update 10 and considerations about the new Java Quick Starter service)
(Updated with: Java Runtime Environment (JRE) 6 Update 11)
Line 1: Line 1:
==Java Runtime Environment (JRE) 6 Update 10==
+
==Java Runtime Environment (JRE) 6 Update 11==
  
As for now there seem to be no specific security reasons to update JRE to Update 10, so Update 10 can be considered just as a version/feature upgrade.
+
As for now there seem to be no specific security reasons to update JRE to Update 11, so Update 11 can be considered just as a version/feature upgrade.
  
Sun has skipped 3 update versions and has released Update 10 as the version replacing Update 7.
+
Sun has skipped 3 update versions and has released Update 10 and then Update 11 as the version replacing Update 7.
 
Update 10 introduces some substantial changes, also in relation to the installation/uninstallation process we manage with WPKG: specifically it introduces a new binary "jqs.exe" and a service called "Java Quick Starter" starting it automatically at boot time.
 
Update 10 introduces some substantial changes, also in relation to the installation/uninstallation process we manage with WPKG: specifically it introduces a new binary "jqs.exe" and a service called "Java Quick Starter" starting it automatically at boot time.
  
Line 33: Line 33:
  
 
This requires the Windows Offline installation package available from Sun. Note that the java install package does not replace old versions, so JRE 1.5 and JRE 1.6 can coexist; all older 1.6 update versions (1.6.0 up to 1.6.0 Update 7) are tried to be removed (note that the update version seems to be no more reflected in the last number in the Uninstall ID).
 
This requires the Windows Offline installation package available from Sun. Note that the java install package does not replace old versions, so JRE 1.5 and JRE 1.6 can coexist; all older 1.6 update versions (1.6.0 up to 1.6.0 Update 7) are tried to be removed (note that the update version seems to be no more reflected in the last number in the Uninstall ID).
The following installs JRE Update 10 and then removes the "Java Quick Starter" service; if you want to keep "Java Quick Starter" service then just remove the line with "jqs.exe -unregister", but remeber to stop/kill JQS before uninstallation.
+
 
 +
Actually, with Update 10 and 11 Sun has introduced as default the so called "in place" update mechanism which automatically does remove the previous version. So the line that tries to remove the Update 10 version (msiexec /qn /x {26A24AE4-039D-4CA4-87B4-2F83216010FF}) is not strictly necessary.
 +
 
 +
The following installs JRE Update 11 and then removes the "Java Quick Starter" service; if you want to keep "Java Quick Starter" service then just remove the line with "jqs.exe -unregister", but remeber to stop/kill JQS before uninstallation.
  
 
<source lang="xml">
 
<source lang="xml">
  <package id="java6" name="Java Runtime Environment 6 Update 10" revision="10" reboot="false" priority="100">
+
  <package id="java6" name="Java Runtime Environment 6 Update 11" revision="11" reboot="false" priority="100">
 
   <check type="uninstall" condition="exists" path="Java(TM) 6 Update 10" />
 
   <check type="uninstall" condition="exists" path="Java(TM) 6 Update 10" />
 
   <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160000}'><exit code='0' /><exit code='1605' /></install>
 
   <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160000}'><exit code='0' /><exit code='1605' /></install>
Line 46: Line 49:
 
   <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160060}'><exit code='0' /><exit code='1605' /></install>
 
   <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160060}'><exit code='0' /><exit code='1605' /></install>
 
   <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160070}'><exit code='0' /><exit code='1605' /></install>
 
   <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160070}'><exit code='0' /><exit code='1605' /></install>
   <install cmd='%SOFTWARE%\jre\jre-6u10-windows-i586-p.exe /s IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Suppress JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0' />
+
  <install cmd='msiexec /qn /x {26A24AE4-039D-4CA4-87B4-2F83216010FF}'><exit code='0' /><exit code='1605' /></install>
 +
   <install cmd='%SOFTWARE%\jre\jre-6u11-windows-i586-p.exe /s IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Suppress JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0' />
 
   <install cmd="%PROGRAMFILES%\Java\jre6\bin\jqs.exe -unregister"/>
 
   <install cmd="%PROGRAMFILES%\Java\jre6\bin\jqs.exe -unregister"/>
 
   <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160000}'><exit code='0' /><exit code='1605' /></upgrade>
 
   <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160000}'><exit code='0' /><exit code='1605' /></upgrade>
Line 56: Line 60:
 
   <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160060}'><exit code='0' /><exit code='1605' /></upgrade>
 
   <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160060}'><exit code='0' /><exit code='1605' /></upgrade>
 
   <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160070}'><exit code='0' /><exit code='1605' /></upgrade>
 
   <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160070}'><exit code='0' /><exit code='1605' /></upgrade>
   <upgrade cmd='%SOFTWARE%\jre\jre-6u10-windows-i586-p.exe /s IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Suppress JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0' />
+
  <upgrade cmd='msiexec /qn /x {26A24AE4-039D-4CA4-87B4-2F83216010FF}'><exit code='0' /><exit code='1605' /></upgrade>
 +
   <upgrade cmd='%SOFTWARE%\jre\jre-6u11-windows-i586-p.exe /s IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Suppress JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0' />
 
   <upgrade cmd="%PROGRAMFILES%\Java\jre6\bin\jqs.exe -unregister"/>
 
   <upgrade cmd="%PROGRAMFILES%\Java\jre6\bin\jqs.exe -unregister"/>
   <remove cmd='msiexec /qn /x {26A24AE4-039D-4CA4-87B4-2F83216010FF}' />
+
   <remove cmd='msiexec /qn /x {26A24AE4-039D-4CA4-87B4-2F83216011FF}' />
 
  </package>
 
  </package>
 
</source>
 
</source>
 +
  
 
Automatic updates can be disabled with JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0; if these command line switches should not work for you, then you can alter the registry (read [[Adding Registry Settings]] for that) to disable autoupdate:
 
Automatic updates can be disabled with JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0; if these command line switches should not work for you, then you can alter the registry (read [[Adding Registry Settings]] for that) to disable autoupdate:
Line 72: Line 78:
 
"SunJavaUpdateSched"=-
 
"SunJavaUpdateSched"=-
 
</source>
 
</source>
 
 
  
 
==Java Runtime Environment (JRE) 6 Update 7==
 
==Java Runtime Environment (JRE) 6 Update 7==

Revision as of 10:42, 3 December 2008

Java Runtime Environment (JRE) 6 Update 11

As for now there seem to be no specific security reasons to update JRE to Update 11, so Update 11 can be considered just as a version/feature upgrade.

Sun has skipped 3 update versions and has released Update 10 and then Update 11 as the version replacing Update 7. Update 10 introduces some substantial changes, also in relation to the installation/uninstallation process we manage with WPKG: specifically it introduces a new binary "jqs.exe" and a service called "Java Quick Starter" starting it automatically at boot time.

"Java Quick Starter" is described as a prefetching service that should make java applications start faster. But it has a drawback: it must be killed before uninstallation or installation fails, and uninstallation via msiexec does not seem to be smart enough to do this.

Although there seems to be no command line switches to allow/disallow the installation of "Java Quick Starter", the jqs.exe binary itself can be used immediately after installation in order to add/remove the "Java Quick Starter" service.

The following table shows the command line switches you can invoke with the jqs.exe binary:

C:\Program Files\Java\jre6\bin>jqs -help
Usage: jqs <mode> [<options>]

The following modes are supported:
  -help         print this help message and exit
  -register     install JQS service and register browser startup detectors
  -unregister   uninstall JQS service and unregister startup detectors
  -enable       enable JQS service
  -disable      disable JQS service
  -pause        pause prefetching
  -resume       resume prefetching
  -version      print version of the associated Java Runtime

Options include:
  -config <config>      set JQS configuration file
  -profile <profile>    set JQS profile file
  -logfile <logfile>    set JQS log file
  -verbose <level>      verbose operation


This requires the Windows Offline installation package available from Sun. Note that the java install package does not replace old versions, so JRE 1.5 and JRE 1.6 can coexist; all older 1.6 update versions (1.6.0 up to 1.6.0 Update 7) are tried to be removed (note that the update version seems to be no more reflected in the last number in the Uninstall ID).

Actually, with Update 10 and 11 Sun has introduced as default the so called "in place" update mechanism which automatically does remove the previous version. So the line that tries to remove the Update 10 version (msiexec /qn /x {26A24AE4-039D-4CA4-87B4-2F83216010FF}) is not strictly necessary.

The following installs JRE Update 11 and then removes the "Java Quick Starter" service; if you want to keep "Java Quick Starter" service then just remove the line with "jqs.exe -unregister", but remeber to stop/kill JQS before uninstallation.

 <package id="java6" name="Java Runtime Environment 6 Update 11" revision="11" reboot="false" priority="100">
  <check type="uninstall" condition="exists" path="Java(TM) 6 Update 10" />
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160000}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160010}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160020}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160030}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160040}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160050}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160060}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160070}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {26A24AE4-039D-4CA4-87B4-2F83216010FF}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='%SOFTWARE%\jre\jre-6u11-windows-i586-p.exe /s IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Suppress JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0' />
  <install cmd="%PROGRAMFILES%\Java\jre6\bin\jqs.exe -unregister"/>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160000}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160010}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160020}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160030}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160040}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160050}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160060}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160070}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {26A24AE4-039D-4CA4-87B4-2F83216010FF}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='%SOFTWARE%\jre\jre-6u11-windows-i586-p.exe /s IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Suppress JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0' />
  <upgrade cmd="%PROGRAMFILES%\Java\jre6\bin\jqs.exe -unregister"/>
  <remove cmd='msiexec /qn /x {26A24AE4-039D-4CA4-87B4-2F83216011FF}' />
 </package>


Automatic updates can be disabled with JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0; if these command line switches should not work for you, then you can alter the registry (read Adding Registry Settings for that) to disable autoupdate:

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Update\Policy]
"EnableAutoUpdateCheck"=dword:00000000
"EnableJavaUpdate"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"SunJavaUpdateSched"=-

Java Runtime Environment (JRE) 6 Update 7

You are encouraged to upgrade for security reasons to Update 7: http://secunia.com/advisories/31010/.

This requires the Windows Offline installation package available from Sun. Note that the java install package does not replace old versions, so JRE 1.5 and JRE 1.6 can coexist; all older 1.6 update versions (1.6.0 up to 1.6.0 Update 6) are tried to be removed (note that the update version is reflected in the last number in the Uninstall ID). Notice how the path string in the uninstall check has changed from previous version.

For the JDK, just change "jre" to "jdk" in the setup program's name and change "A77B" to "A78A" in the Uninstall ID.

For the JDK, we had to replace {3248F0A8-6813-11D6-A77B- with {32A3A4F4-B792-11D6-A78A-. This works and tested with Java6u7

 <package id="java6" name="Java Runtime Environment 6 Update 7" revision="7" reboot="false" priority="100">
  <check type="uninstall" condition="exists" path="Java(TM) 6 Update 7" />
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160000}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160010}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160020}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160030}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160040}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160050}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160060}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='%SOFTWARE%\jre\jre-6u7-windows-i586-p.exe /s IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Suppress JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0' />
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160000}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160010}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160020}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160030}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160040}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160050}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160060}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='%SOFTWARE%\jre\jre-6u7-windows-i586-p.exe /s IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Suppress JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0' />
  <remove cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0160070}' />
 </package>

Automatic updates can be disabled with JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0; if these command line switches should not work for you, then you can alter the registry (read Adding Registry Settings for that) to disable autoupdate:

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Update\Policy]
"EnableAutoUpdateCheck"=dword:00000000
"EnableJavaUpdate"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"SunJavaUpdateSched"=-


J2SE Runtime Environment 5.0 Update 11

This requires the Windows Offfline installation package available from Sun. Note that the java install package does not replace old versions, so to accomplish a true upgrade, remove commands are required for the install/upgrade process.

<package id="java" name="Java Runtime Environment 1.5.0_11" revision="4" reboot="false" priority="0">
  <check type="uninstall" condition="exists" path="J2SE Runtime Environment 5.0 Update 11" />
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150000}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150010}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150020}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150030}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150040}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150050}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150060}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150070}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150080}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150090}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150100}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='%SOFTWARE%\jre\jre-1_5_0_11-windows-i586-p-s.exe /s /v" /qn IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Supress JAVAUPDATE=0' />
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150000}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150010}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150020}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150030}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150040}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150050}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150060}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150070}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150080}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150090}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150100}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='%SOFTWARE%\jre\jre-1_5_0_11-windows-i586-p-s.exe /s /v" /qn IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Supress JAVAUPDATE=0' />
  <remove cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150110}' />
</package>

J2SE Runtime Environment 5.0 Update 10

This requires the Windows Offfline installation package available from Sun. Note that the java install package does not replace old versions, so to accomplish a true upgrade, remove commands are required for the install/upgrade process.

Note that the class id of the remove section was incorrect in an early edition of this page - the last 3 digits should be 100, not 010.

<package id="java" name="Java Runtime Environment 1.5.0_10" revision="3" reboot="false" priority="0">
  <check type="uninstall" condition="exists" path="J2SE Runtime Environment 5.0 Update 10" />
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150000}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150010}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150020}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150030}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150040}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150050}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150060}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150070}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150080}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150090}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='%SOFTWARE%\jre\jre-1_5_0_10-windows-i586-p-s.exe /s /v" /qn IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Supress JAVAUPDATE=0' />
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150000}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150010}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150020}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150030}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150040}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150050}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150060}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150070}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150080}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150090}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='%SOFTWARE%\jre\jre-1_5_0_10-windows-i586-p-s.exe /s /v" /qn IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Supress JAVAUPDATE=0' />
  <remove cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150100}' />
</package>

J2SE Runtime Environment 5.0 Update 9

This requires the Windows Offfline installation package available from Sun. Note that the java install package does not replace old versions, so to accomplish a true upgrade, remove commands are required for the install/upgrade process.


<package id="jre" name="Java Runtime Environment 1.5.0_9" revision="2" reboot="false" priority="0">
  <check type="uninstall" condition="exists" path="J2SE Runtime Environment 5.0 Update 9" />
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150000}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150010}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150020}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150030}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150040}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150050}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150060}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150070}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150080}'><exit code='0' /><exit code='1605' /></install>
  <install cmd='%SOFTWARE%\java\jre-1_5_0_09-windows-i586-p.exe /s /v" /qn IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Supress JAVAUPDATE=0' />
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150000}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150010}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150020}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150030}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150040}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150050}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150060}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150070}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150080}'><exit code='0' /><exit code='1605' /></upgrade>
  <upgrade cmd='%SOFTWARE%\java\jre-1_5_0_09-windows-i586-p.exe /s /v" /qn IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Supress JAVAUPDATE=0' />
  <remove cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150090}' />
</package>

J2SE Runtime Environment 5.0 Update 6

This requires the Windows Offline installation package available from Sun.

<package id="jre" name="Java Runtime Environment 1.5.0_6" revision="1" reboot="true" priority="0">
 <check type="uninstall" condition="exists" path="J2SE Runtime Environment 5.0 Update 6" />
 <install cmd='%WINDIR%\system32\cmd /c start /wait /d %SOFTWARE%\java %SOFTWARE%\java\jre-1_5_0_06-windows-i586-p.exe /s /v" /qn IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL REBOOT=Supress JAVAUPDATE=0' />
 <remove cmd='msiexec /qn /x {3248F0A8-6813-11D6-A77B-00B0D0150060}' />
</package>

Other Useful MSI Properties

This will install java with no updating and no icons:

jre-1_5_0_10-windows-i586-p-s.exe /s /v"/qn ADDLOCAL=ALL AUTOUPDATECHECK=0 JU=0 IEXPLORER=1 MOZILLA=1 WEBSTARTICON=0 SYSTRAY=0 REBOOT=Suppress JAVAUPDATE=0 EULA=1"

Further Details

J2SE Runtime Environment 5.0 Update 5

First download the EXE package from java.sun.com, install it, and find an MSI package on your drive. Then use this MSI to distribute Java to other machines.

Note: When you use the *.exe file directly with command line switches as proposed by sun the installer waits forever for someone accepting the licence agreement.

Note that "install cmd" should be in one line; it was wrapped because it was too long to fit here!

 <package
     id="jre"
     name="Java Runtime Environment 1.5.0_05"
     revision="1"
     reboot="true"
     priority="9">
     <check type="uninstall" condition="exists" path="J2SE Runtime Environment 5.0 Update 5" />
     <install cmd='msiexec /q /i %SOFTWARE%\Java\jre1.5.0_05.msi allusers=1 REBOOT=Suppress CUSTOM=1 IEXPLORER=1 MOZILLA=1 NETSCAPE6=1 JAVAUPDATE=0 ADDLOCAL=ALL' />
     <remove  cmd='MsiExec.exe /q /x{3248F0A8-6813-11D6-A77B-00B0D0150050}' />
 </package>

 <package
     id="jdk"
     name="Java Development Kit 1.5.0_05"
     revision="1"
     reboot="true"
     priority="9">
     <check type="uninstall" condition="exists" path="J2SE Development Kit 5.0 Update 5" />
     <install cmd='msiexec /q /i %SOFTWARE%\Java\jdk1.5.0_05.msi allusers=1 REBOOT=Suppress CUSTOM=1 IEXPLORER=1 MOZILLA=1 NETSCAPE6=1 JAVAUPDATE=0 ADDLOCAL=ALL' />
     <remove  cmd='MsiExec.exe /q /x{32A3A4F4-B792-11D6-A78A-00B0D0150050}' />
 </package>

Java 6 (JRE/SDK), generic solution

This is my personal solution. Works properly for me starting from Java 6 Update 10. It works on Windows XP and Vista. 64-bit OS is supported as well as 32-bit OS. It also seems that Sun is not going to install each Java update into an independent directory. Well, Update 11 is not out yet, but when I look to the new install directory structure one might think that upcoming updates will overwrite the files. This will hopefully eliminate the need to uninstall previous versions manually.

Download

First of all download the offline installers. Do not download the new Online installers. It might work as well but I did not try it. After download you should have the following files (or a subset of it):

  • jdk-6u10-windows-i586-p.exe
  • jdk-6u10-windows-x64.exe
  • jre-6u10-windows-i586-p.exe
  • jre-6u10-windows-x64.exe

If you just deploy JRE, then you do not need to download the JDK packages. Similarly you do not need the x64 packages if you deploy to 32-bit OS only.

Prepare installation

Unfortunately the .exe installers do not always work silently when the "/v/qn..." switch is used. On 64-bit OS it might yield a "package not found" error in silent installation. That's why I recommend to pre-extract the packages.

  1. Run the installer as usual (e.g. double-click "jdk-6u10-windows-i586-p.exe"
  2. Get the extracted installer from "%AppData%\Sun\Java\" ("%LocalAppData%\..\LocalLow\Sun\Java" in Vista) and copy them to the package deployment folder. Do this for all packages you like to deploy. Here's a sample how my directory structure looks after extracting and copying:
    • JavaSE/install.cmd
    • JavaSE/jdk1.6.0_10_32/jdk-6u10-windows-i586-p.exe
    • JavaSE/jdk1.6.0_10_32/jdk1.6.0_10.msi
    • JavaSE/jdk1.6.0_10_32/sb160100.cab
    • JavaSE/jdk1.6.0_10_32/sd160100.cab
    • JavaSE/jdk1.6.0_10_32/sj160100.cab
    • JavaSE/jdk1.6.0_10_32/sp160100.cab
    • JavaSE/jdk1.6.0_10_32/sr160100.cab
    • JavaSE/jdk1.6.0_10_32/ss160100.cab
    • JavaSE/jdk1.6.0_10_32/st160100.cab
    • JavaSE/jdk1.6.0_10_32/sz160100.cab
    • JavaSE/jdk1.6.0_10_x64/jdk-6u10-windows-x64.exe
    • JavaSE/jdk1.6.0_10_x64/jdk-6u10-windows-x64.msi
    • JavaSE/jre1.6.0_10_32/Data1.cab
    • JavaSE/jre1.6.0_10_32/jre-6u10-windows-i586-p.exe
    • JavaSE/jre1.6.0_10_32/jre1.6.0_10.msi
    • JavaSE/jre1.6.0_10_x64/Data1.cab
    • JavaSE/jre1.6.0_10_x64/jre-6u10-windows-x64.exe
    • JavaSE/jre1.6.0_10_x64/jre1.6.0_10.msi
    • JavaSE/unattended-jdk-uninstall.cmd
    • JavaSE/unattended-jdk.cmd
    • JavaSE/unattended-jre-uninstall.cmd
    • JavaSE/unattended-jre.cmd

Please NOTE: There are some *.cmd scripts listed which I use as install scripts. The scripts are listed within the following chapters.

Package definition

<?xml version="1.0" encoding="utf-8" ?>
<packages>

<package id='JRE' name='Java runtime environment' revision='16010' priority='50' reboot='false' >
  <!-- Java runtime environment -->
  <check type='logical' condition='or'>
  <check type='uninstall' condition='exists' path='Java(TM) 6 Update 10' />
  <check type='uninstall' condition='exists' path='Java(TM) 6 Update 10 (64-bit)' />
  </check>
  <install cmd='"%SOFTWARE%\JavaSE\unattended-jre.cmd"' />
  <remove cmd='"%SOFTWARE%\JavaSE\unattended-jre-uninstall.cmd"' />
  <upgrade cmd='"%SOFTWARE%\JavaSE\unattended-jre.cmd"' />
</package>

</packages>

As you can see the package just runs the unattended* cmd script which will make sure the right packages for the currently running operating system is executed.

NOTE: This package definition is for JRE installation. If you would like to deploy JDK, then just refer to unattended-jdk* scripts insted.

The scripts

As listed above there are some scripts required. And here they come...

NOTE: The unattended* scripts are basically identical for all versions - they just need to list the correct MSI file within the header (PKG32 and PKG64 variables).

unattended-jre.cmd / unattended-jre-uninstall.cmd (both files are identical, you might also link them on Unix/Linux level).

@echo off

REM Get MSI file by executing installation and then grab tje MSI file from
REM the %LocalAppData%\..\LocalLow\Sun\Java folder

set PKG32=jre1.6.0_10_32\jre1.6.0_10.msi
set PKG64=jre1.6.0_10_x64\jre1.6.0_10.msi
set EXIT_CODE=0

set INSTALLER=install.cmd

echo Applying Java Runtime

REM Determine aciton
if "%~nx0" == "unattended-jre-uninstall.cmd" (
  if not "%ProgramFiles(x86)%" == "" (
    goto 64bituninstall
  ) else (
    goto 32bituninstall
  )
)

if not "%ProgramFiles(x86)%" == "" goto 64bitinstall
goto 32bitinstall

:64bitinstall
echo Installing 64bit edition
call "%~dp0%INSTALLER%" msiinstall "%PKG32%" "%PKG64%" "" "/qn /norestart IEXPLORER=1 NETSCAPE6=0 MOZILLA=1 REBOOT=Suppress JAVAUPDATE=0 WEBSTARTICON=0"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
REM Install 32-bit version as well - used by 32-bit applications
call "%~dp0%INSTALLER%" msiinstall "%PKG32%" "%PKG32%" "" "/qn /norestart IEXPLORER=1 NETSCAPE6=0 MOZILLA=1 REBOOT=Suppress JAVAUPDATE=0 WEBSTARTICON=0"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
goto end

:64bituninstall
echo Uninstalling 64bit edition
call "%~dp0%INSTALLER%" msiuninstall "%PKG32%" "%PKG64%"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
REM Uninstall 32-bit version as well - used by 32-bit applications
call "%~dp0%INSTALLER%" msiuninstall "%PKG32%" "%PKG32%"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
goto end


:32bitinstall
echo Installing 32bit edition
call "%~dp0%INSTALLER%" msiinstall "%PKG32%" "%PKG64%"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
goto end

:32bituninstall
echo Uninstalling 32bit edition
call "%~dp0%INSTALLER%" msiuninstall "%PKG32%" "%PKG64%"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
goto end


:end
exit /B %EXIT_CODE%

unattended-jdk.cmd / unattended-jdk-uninstall.cmd (both files are identical, you might also link them on Unix/Linux level).

@echo off

REM Get MSI file by executing installation and then grab tje MSI file from
REM the %LocalAppData%\..\LocalLow\Sun\Java folder

set PKG32=jdk1.6.0_10_32\jdk1.6.0_10.msi
set PKG64=jdk1.6.0_10_x64\jdk-6u10-windows-x64.msi
set EXIT_CODE=0

set INSTALLER=install.cmd

echo Applying Java Runtime

REM Determine aciton
if "%~nx0" == "unattended-jdk-uninstall.cmd" (
  if not "%ProgramFiles(x86)%" == "" (
    goto 64bituninstall
  ) else (
    goto 32bituninstall
  )
)

if not "%ProgramFiles(x86)%" == "" goto 64bitinstall
goto 32bitinstall

:64bitinstall
echo Installing 64bit edition
call "%~dp0%INSTALLER%" msiinstall "%PKG32%" "%PKG64%" "" "/qn /norestart IEXPLORER=1 NETSCAPE6=0 MOZILLA=1 REBOOT=Suppress JAVAUPDATE=0 WEBSTARTICON=0"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
REM Install 32-bit version as well - used by 32-bit applications
call "%~dp0%INSTALLER%" msiinstall "%PKG32%" "%PKG32%" "" "/qn /norestart IEXPLORER=1 NETSCAPE6=0 MOZILLA=1 REBOOT=Suppress JAVAUPDATE=0 WEBSTARTICON=0"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
goto end

:64bituninstall
echo Uninstalling 64bit edition
call "%~dp0%INSTALLER%" msiuninstall "%PKG32%" "%PKG64%"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
REM Uninstall 32-bit version as well - used by 32-bit applications
call "%~dp0%INSTALLER%" msiuninstall "%PKG32%" "%PKG32%"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
goto end


:32bitinstall
echo Installing 32bit edition
call "%~dp0%INSTALLER%" msiinstall "%PKG32%" "%PKG64%" "" "/qn /norestart IEXPLORER=1 NETSCAPE6=0 MOZILLA=1 REBOOT=Suppress JAVAUPDATE=0 WEBSTARTICON=0"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
goto end

:32bituninstall
echo Uninstalling 32bit edition
call "%~dp0%INSTALLER%" msiuninstall "%PKG32%" "%PKG64%"
if %ERRORLEVEL% GTR %EXIT_CODE% set EXIT_CODE=%ERRORLEVEL%
goto end


:end
exit /B %EXIT_CODE%

As you can see the script is mainly used to determine the correct installer for 32- or 64-bit operating system.

NOTE: I am installing 32-bit version on 64-bit OS as well. This assures that 32-bit browsers can run the Java plug-in too.

Due to the fact that lots of installers are using always the same silent switches I prepared a generic "install.cmd" script. So I can just pass the installer filename and the type of installer as parameters and I do not have to care about the switches each time. So here it comes:

@echo off

REM Usage:
REM msiinstall.cmd <type> <32-bit-installer> <64-bit-installer> [installer-location [custom-options]]
REM where type is one of
REM     msiinstall     Install the given MSI package
REM     msiuninstall   Uninstall the given MSI package
REM     innosetup      Inno setup
REM     installshield  Install shield
REM     nsis           Nullsoft install system (NSIS)
REM     custom         Custom installer - options required in this case
REM 32-bit-installer   Full file name (including extension) of 32-bit installer
REM 64-bit-installer   Full file name (including extension) of 64-bit installer
REM installer-location Path where the installers are stored, if empty assumes directory where install.cmd is
REM custom-options     Replace the default installer options with the ones given

REM Global variables
set INSTALL_CMD=
set EXIT_CODE=0

REM Get command type
set TYPE=%~1

REM Get 32-bit installer name
set CMD32=%~2

REM Get 64-bit installer name
set CMD64=%~3

REM get file path
set INSTALLER_PATH=%~dp0
if not "%~4" == "" (
set INSTALLER_PATH=%~4
)

set OPTIONS=
if not "%~5" == "" (
set OPTIONS=%~5
)

REM Detect which system is used
if not "%ProgramFiles(x86)%" == "" goto 64bit
goto 32bit


REM ##########################################################################
REM 64-bit system detected
REM ##########################################################################
:64bit
REM Determine 64-bit installer to be used
echo 64-bit system detected.
REM set INSTALLER64=
if not "%CMD64%" == "" (
set INSTALLER64=%CMD64%
) else (
REM Use 32-bit installer if available, no 64-bit installer available.
if not "%CMD32%" == "" (
echo Using 32-bit installer, no 64-bit installer specified.
set INSTALLER64=%CMD32%
) else (
echo Neither 64-bit nor 32-bit installer specified. Exiting.
goto usage
)
)

REM Check if installer is valid
if exist "%INSTALLER_PATH%%INSTALLER64%" (
set INSTALL_CMD=%INSTALLER_PATH%%INSTALLER64%
) else (
echo Installer "%INSTALLER_PATH%%INSTALLER64%" cannot be found! Exiting.
exit /B 97
)
goto installerselection


REM ##########################################################################
REM 32-bit system detected
REM ##########################################################################
:32bit
REM Determine 32-bit installer to be used
echo 32-bit system detected.
set INSTALLER32=
if not "%CMD32%" == "" (
set INSTALLER32=%CMD32%
) else (
echo No 32-bit installer specified. Exiting.
exit /B 96
)


REM Check if installer is valid
if exist "%INSTALLER_PATH%%INSTALLER32%" (
set INSTALL_CMD=%INSTALLER_PATH%%INSTALLER32%
) else (
echo Installer "%INSTALLER_PATH%%INSTALLER32%" cannot be found! Exiting.
exit /B 95
)
goto installerselection



REM ##########################################################################
REM select installer system
REM ##########################################################################
:installerselection
if /i "%TYPE%" == "msiinstall"    goto msiinstaller
if /i "%TYPE%" == "msiuninstall"  goto msiuninstaller
if /i "%TYPE%" == "innosetup"     goto innoinstaller
if /i "%TYPE%" == "installshield" goto installshieldinstaller
if /i "%TYPE%" == "nsis"          goto nsisinstaller
if /i "%TYPE%" == "custom"        goto custominstaller
goto usage



:msiinstaller
echo Installing "%INSTALL_CMD%"
if "%OPTIONS%" == "" (
set OPTIONS=/qn /norestart
)
start /wait "Software installation" msiexec /i"%INSTALL_CMD%" %OPTIONS%
set EXIT_CODE=%ERRORLEVEL%
goto end


:msiuninstaller
echo Uninstalling "%INSTALL_CMD%"
if "%OPTIONS%" == "" (
set OPTIONS=/qn /norestart
)
start /wait "Software uninstallation" msiexec /x "%INSTALL_CMD%" %OPTIONS%
set EXIT_CODE=%ERRORLEVEL%
goto end


:innoinstaller
echo Installing "%INSTALL_CMD%"
REM if "%OPTIONS%" == "" (
REM set OPTIONS=/verysilent /norestart /sp-
REM )
start /wait "Software installation" "%INSTALL_CMD%" /verysilent /norestart /sp- %OPTIONS%
set EXIT_CODE=%ERRORLEVEL%
goto end


:installshieldinstaller
echo Installing "%INSTALL_CMD%"
start /wait "Software installation" "%INSTALL_CMD%" /s %OPTIONS%
set EXIT_CODE=%ERRORLEVEL%
goto end


:nsisinstaller
echo Installing "%INSTALL_CMD%"
start /wait "Software installation" "%INSTALL_CMD%" /S %OPTIONS%
set EXIT_CODE=%ERRORLEVEL%
goto end

:custominstaller
if "%OPTIONS%" == "" goto usage
echo Installing "%INSTALL_CMD%"
start /wait "Software installation" "%INSTALL_CMD%" %OPTIONS%
set EXIT_CODE=%ERRORLEEL%
goto end

:usage
echo Usage:
echo "%~nx0 <type> <32-bit-installer> <64-bit-installer> [installer-location [custom-options]]"
echo where type is one of
echo     msiinstall        Install the given MSI package
echo     msiuninstall      Uninstall the given MSI package
echo     innosetup         Inno setup
echo     installshield     Install shield
echo     nsis              Nullsoft install system (NSIS)
echo     custom            Custom installer - options required in this case
echo 32-bit-installer      Full file name (including extension) of 32-bit installer
echo 64-bit-installer      Full file name (including extension) of 64-bit installer
echo installer-location    Path where the installers are stored
echo custom-options        Replace the default installer options with the ones given
exit /B 99

:end
exit /B %EXIT_CODE%

That's it. This framework is quite easy to re-use for upgrades. The only thing you have to do is to download the Java Offline installers for the edition you like to deploy, then extract it, put the files to a sub-folder of the scripts (see directory structure outlined above) and then change the PKG32 and PKG64 paths on top of the scripts accordingly.

See also Sun Java