Table of Contents

Java Runtime

Adaptation of the opsi-template scripts for the Java 7 Runtime.
Of course this is already available here on this wiki, but these scripts do things differently.
Get the files here: http://java.com/en/download/manual.jsp
You somehow have to extract the downloaded files, by installing them, and getting the MSI files from these locations:
%userprofile%\Application Data\Sun\Java\jre1.7.0_55\
%userprofile%\Application Data\Sun\Java\jre1.7.0_55_x64\

Tree:
|-- files
|   |-- x64
|   |   |--Data1.cab
|   |   |--jre1.7.0_55.msi
|   |   |--readme.txt
|   |   |--shexview.chm
|   |   `--shexview.exe
|   |-- x86
|   |   |--Data1.cab
|   |   |--jre1.7.0.55.msi
|   |   |--readme.txt
|   |   |--shexview.chm
|   |   `--shexview.exe
|   |-- cacert.org-class3.der
|   `-- cacert.org-root.der
|-- delsub3264.ins
|-- java-runtime.png
|-- setup3264.ins
`-- uninstall3264.ins

Get ShellExView here: http://www.nirsoft.net/utils/shexview.html
Of course you need both the 64-bit and 32-bit versions, and put them in the right directories. This should of course also be done for the java files, which have the same names for 32-bit and 64-bit, but are very different.

This version does not install itself in %userprofile%\Application Data\Sun, and hopefully kills off that stupid jqs, java slow starter. Also, no java updater is ever installed, so it doesn't need to be removed. The java deploy plugin is removed from the registry so it does not show up in Mozilla Firefox. Unneeded shell extensions are disabled with ShellExView. CaCert.org root certificates get imported in the java keystore.

If you uncomment the uninstall section in the setup3264.ins it will first need a reboot before it will install a newer version. If you tend to encounter java runtimes before version 7 you will install them side-by-side with this part uncommented.

control file

[Package]
version: 1
depends: 
incremental: False
 
[Product]
type: localboot
id: java-runtime
name: SUN Java Runtime Environment
description: Java 7 Runtime
advice: 
version: 1.7.0.55
priority: 0
licenseRequired: False
productClasses: 
setupScript: setup3264.ins
uninstallScript: uninstall3264.ins
updateScript: 
alwaysScript: 
onceScript: 
customScript: 
userLoginScript: 
 
[ProductDependency]
action: setup
requiredProduct: mozilla-firefox
requiredStatus: installed
 
[Changelog]
java-runtime (1.7.0.55-1) testing; urgency=low
 
  * Initial package
 
 -- ICT <ict@gcecad-service.nl>  Tue, 06 May 2014 18:51:20 +0000

setup3264.ins

; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib
; and published under the Terms of the General Public License.
; credits: http://www.opsi.org/en/credits/
;
; License Management removed
 
 
[Actions]
requiredWinstVersion >= "4.10.8.6"
 
;DefVar $MsiId32$
;DefVar $UninstallProgram32$
;DefVar $MsiId64$
;DefVar $UninstallProgram64$
DefVar $LogDir$
DefVar $ProductId$  
DefVar $MinimumSpace$
;DefVar $InstallDir32$
;DefVar $InstallDir64$
DefVar $ExitCode$
DefVar $INST_SystemType$
;DefVar $INST_architecture$
DefVar $INST_MsVersion$
 
set $INST_MsVersion$ = GetMsVersionInfo
Set $INST_SystemType$ = GetSystemType
;set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
Set $LogDir$ = "%SystemDrive%\tmp"
 
; ----------------------------------------------------------------
; - Please edit the following values                             -
; ----------------------------------------------------------------
;$ProductId$ should be the name of the product in opsi
; therefore please: only lower letters, no umlauts, 
; no white space use '-' as a seperator
Set $ProductId$       = "java-runtime"
Set $MinimumSpace$    = "500 MB"
; the path were we find the product after the installation
;Set $InstallDir32$      = "%ProgramFiles32Dir%\<path to the product>"
;Set $InstallDir64$      = "%ProgramFiles64Dir%\<path to the product>"
; ----------------------------------------------------------------
 
if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$))
	LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$
	isFatalError
	; Stop process and set installation status to failed
endif
if $INST_MsVersion$ < "5.1"
	LogError "Windows XP or newer is required for " + $ProductId$  
	isFatalError
endif
 
comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$
 
;if FileExists("%ScriptPath%\delsub3264.ins")
;	comment "Start uninstall sub section"
;	Sub "%ScriptPath%\delsub3264.ins"
;endif
 
comment "installing"
 
if ($INST_SystemType$ = "x86 System") 
;and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
	Message "Installing " + $ProductId$ + "..."
	comment "Start setup program"
	Winbatch_install_32
	Sub_check_exitcode
	comment "Copy files"
	Files_install_32 /32Bit
	comment "Patch Registry"
	Registry_install /32Bit
	Registry_install_AllProfiles /AllNTUserDats
	comment "Create shortcuts"
	LinkFolder_install
endif
 
if ($INST_SystemType$ = "64 Bit System") 
;and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
	Message "Installing " + $ProductId$ + "..."
	comment "Start setup program"
	Winbatch_install_64
	Sub_check_exitcode
	Winbatch_install_32
	Sub_check_exitcode
	comment "Copy files"
	Files_install_64 /64Bit
	comment "Patch Registry"
	Registry_install /64Bit
	Registry_install /32Bit
	Registry_install_AllProfiles /AllNTUserDats
	comment "Create shortcuts"
	LinkFolder_install
endif
 
 
[Winbatch_install_32]
; Install Java Runtime
;"%ScriptPath%\files\jre-7u55-windows-i586.exe" /s IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0 JQS=0 SYSTRAY=0 EULA=0 REBOOT=Suppress
"%SystemRoot%\system32\msiexec.exe" /qb! /package "%ScriptPath%\files\x86\jre1.7.0_55.msi" IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0 JQS=0 SYSTRAY=0 EULA=0 REBOOT=ReallySuppress
 
; Get rid of java quick starter
"%ProgramFiles32Dir%\Java\jre7\bin\jqs.exe" -unregister
 
; Install cacert.org root certificates in java keystore
"%ProgramFiles32Dir%\Java\jre7\bin\keytool.exe" -noprompt -import -alias cacert-root -keystore "%ProgramFiles32Dir%\Java\jre7\lib\security\cacerts" -trustcacerts -file "%ScriptPath%\files\cacert.org-root.der" -storepass "changeit"
"%ProgramFiles32Dir%\Java\jre7\bin\keytool.exe" -noprompt -import -alias cacert-class3 -keystore "%ProgramFiles32Dir%\Java\jre7\lib\security\cacerts" -trustcacerts -file "%ScriptPath%\files\cacert.org-class3.der" -storepass "changeit"
 
; Disable %ProgramFiles32Dir%\Java\jre7\bin\jp2ssv.dll
"%ScriptPath%\files\x86\shexview.exe" /disable {DBC80044-A445-435b-BC74-9C25C1C588A9}
; Disable %ProgramFiles32Dir%\Java\jre7\bin\ssv.dll
"%ScriptPath%\files\x86\shexview.exe" /disable {761497BB-D6F0-462C-B6EB-D4DAF1D92D43}
 
[Files_install_32]
; Get rid of java quick starter
delete -f "%ProgramFiles32Dir%\Java\jre7\bin\jqs.exe"
 
[Winbatch_install_64]
; Install Java Runtime
;"%ScriptPath%\files\jre-7u55-windows-x64.exe" /s IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0 JQS=0 SYSTRAY=0 EULA=0 REBOOT=Suppress
"%SystemRoot%\system32\msiexec.exe" /qb! /package "%ScriptPath%\files\x64\jre1.7.0_55.msi" IEXPLORER=1 MOZILLA=1 ADDLOCAL=ALL JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0 JQS=0 SYSTRAY=0 EULA=0 REBOOT=ReallySuppress
 
; Install cacert.org root certificates in java keystore
"%ProgramFiles64Dir%\Java\jre7\bin\keytool.exe" -noprompt -import -alias cacert-root -keystore "%ProgramFiles64Dir%\Java\jre7\lib\security\cacerts" -trustcacerts -file "%ScriptPath%\files\cacert.org-root.der" -storepass "changeit"
"%ProgramFiles64Dir%\Java\jre7\bin\keytool.exe" -noprompt -import -alias cacert-class3 -keystore "%ProgramFiles64Dir%\Java\jre7\lib\security\cacerts" -trustcacerts -file "%ScriptPath%\files\cacert.org-class3.der" -storepass "changeit"
 
; Disable %ProgramFiles64Dir%\Java\jre7\bin\jp2ssv.dll
"%ScriptPath%\files\x64\shexview.exe" /disable {DBC80044-A445-435b-BC74-9C25C1C588A9}
; Disable %ProgramFiles64Dir%\Java\jre7\bin\ssv.dll
"%ScriptPath%\files\x64\shexview.exe" /disable {761497BB-D6F0-462C-B6EB-D4DAF1D92D43}
 
[Files_install_64]
; Example of recursively copying some files into the installation directory:
;
; copy -s "%ScriptPath%\files\*.*" "$InstallDir64$"
 
[Registry_install]
; Remove deployment plugin from Firefox
deletekey [HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@java.com/DTPlugin,version=10.55.2]
 
[Registry_install_AllProfiles]
; Remove stored start menu order
deletekey [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu]
 
[LinkFolder_install]
; Remove Java from start menu
set_basefolder common_programs
delete_subfolder Java
 
[Sub_check_exitcode]
comment "Test for installation success via exit code"
set $ExitCode$ = getLastExitCode
; informations to exit codes see
; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx
; http://msdn.microsoft.com/en-us/library/aa368542.aspx
if ($ExitCode$ = "0")
	comment "Looks good: setup program gives exitcode zero"
else
	comment "Setup program gives a exitcode unequal zero: " + $ExitCode$
	if ($ExitCode$ = "1605")
		comment "ERROR_UNKNOWN_PRODUCT	1605	This action is only valid for products that are currently installed."
		comment "Uninstall of a not installed product failed - no problem"
	else
		if ($ExitCode$ = "1641")
			comment "looks good: setup program gives exitcode 1641"
			comment "ERROR_SUCCESS_REBOOT_INITIATED	1641	The installer has initiated a restart. This message is indicative of a success."
		else
			if ($ExitCode$ = "3010")
				comment "looks good: setup program gives exitcode 3010"
				comment "ERROR_SUCCESS_REBOOT_REQUIRED	3010	A restart is required to complete the install. This message is indicative of a success."
			else
				logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$
				isFatalError
			endif
		endif
	endif
endif

uninstall3264.ins

; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib gmbh
; and published under the Terms of the General Public License.
; credits: http://www.opsi.org/en/credits/
;
; License Management removed
 
[Actions]
requiredWinstVersion >= "4.10.8.6"
 
;DefVar $MsiId32$
;DefVar $UninstallProgram32$
;DefVar $MsiId64$
;DefVar $UninstallProgram64$
DefVar $LogDir$
DefVar $ExitCode$
DefVar $ProductId$
;DefVar $InstallDir32$
;DefVar $InstallDir64$
DefVar $INST_SystemType$
;DefVar $INST_architecture$
 
Set $INST_SystemType$ = GetSystemType
;set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
 
 
Set $LogDir$ = "%SystemDrive%\tmp"
 
; ----------------------------------------------------------------
; - Please edit the following values                             -
; ----------------------------------------------------------------
Set $ProductId$       = "java-runtime"
;Set $InstallDir32$    = "%ProgramFiles32Dir%\<path to the product>"
;Set $InstallDir64$    = "%ProgramFiles64Dir%\<path to the product>"
; ----------------------------------------------------------------
 
 
comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$
 
Message "Uninstalling " + $ProductId$ + " ..."
 
if FileExists("%ScriptPath%\delsub3264.ins")
	comment "Start uninstall sub section"
	Sub "%ScriptPath%\delsub3264.ins"
endif

delsub3264.ins

; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib gmbh
; and published under the Terms of the General Public License.
; credits: http://www.opsi.org/en/credits/
;
; License Management removed
 
 
DefStringList $result$
DefStringList $result1$
DefVar $appKey$
DefVar $UninstallCommandList$
DefVar $appString$
DefVar $appKeyString$
DefVar $testName$
;DefVar $exeString$
 
Set $appKeyString$ = "DisplayName"
Set $appString$ = "Java 7"
 
;Set $MsiId32$ = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'
;Set $UninstallProgram32$ = $InstallDir32$ + "\uninstall.exe"
 
;Set $MsiId64$ = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'
;Set $UninstallProgram64$ = $InstallDir64$ + "\uninstall.exe"
 
if ($INST_SystemType$ = "x86 System") 
;and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
	Message "Uninstalling " + $ProductId$ + "..."
 
	Set $result$ = getRegistryKeyList32("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
	for $app$ in $result$ do Sub_searchApp32
	if not ($UninstallCommandList$ = "")
		set $result1$ = splitString($UninstallCommandList$,"::")
		for $UninstallCommand$ in $result1$ do Winbatch_uninstall_32 /32Bit
		sub_check_exitcode
	endif
 
 
;	if FileExists($UninstallProgram32$)
;		comment "Uninstall program found, starting uninstall"
;		Winbatch_uninstall_32
;		sub_check_exitcode
;	endif
 
;	if not (GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiId32$ + "] DisplayName") = "")
;		comment "MSI id " + $MsiId32$ + " found in registry, starting msiexec to uninstall"
;		Winbatch_uninstall_msi_32
;		sub_check_exitcode
;	endif
 
	comment "Delete files"
	Files_uninstall_32 /32Bit
	Files_install_AllProfiles /AllNtUserProfiles
	comment "Cleanup registry"
	Registry_uninstall /32Bit
	Registry_uninstall_AllProfiles /AllNTUserDats
endif
 
if ($INST_SystemType$ = "64 Bit System") 
;and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
	Message "Uninstalling " + $ProductId$ + "..."
 
	Set $result$ = getRegistryKeyList64("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
	for $app$ in $result$ do Sub_searchApp64
 	if not ($UninstallCommandList$ = "")
		set $result1$ = splitString($UninstallCommandList$,"::")
		for $UninstallCommand$ in $result1$ do Winbatch_uninstall_64 /64Bit
		sub_check_exitcode
	endif
 
	Set $result$ = getRegistryKeyList32("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
	for $app$ in $result$ do Sub_searchApp32
	if not ($UninstallCommandList$ = "")
		set $result1$ = splitString($UninstallCommandList$,"::")
		for $UninstallCommand$ in $result1$ do Winbatch_uninstall_32 /32Bit
		sub_check_exitcode
	endif
 
;	if FileExists($UninstallProgram64$)
;		comment "Uninstall program found, starting uninstall"
;		Winbatch_uninstall_64
;		sub_check_exitcode
;	endif
 
;	if not (GetRegistryStringValue64("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiId64$ + "] DisplayName") = "")
;		comment "MSI id " + $MsiId64$ + " found in registry, starting msiexec to uninstall"
;		Winbatch_uninstall_msi_64
;		sub_check_exitcode
;	endif
 
	comment "Delete files"
	Files_uninstall_64 /64Bit
	Files_install_AllProfiles /AllNtUserProfiles
	comment "Cleanup registry"
	Registry_uninstall /64Bit
	Registry_uninstall /32Bit
	Registry_uninstall_AllProfiles /AllNTUserDats
endif
 
comment "Delete program shortcuts"
LinkFolder_uninstall
 
[Winbatch_uninstall_32]
$UninstallCommand$
 
;[Winbatch_uninstall_msi_32]
;msiexec /x $MsiId32$ /qb! REBOOT=ReallySuppress
 
[Files_uninstall_32]
; Example for recursively deleting the installation directory (don't forget the trailing backslash):
;
; delete -sf "$InstallDir32$\"
 
[Winbatch_uninstall_64]
$UninstallCommand$
 
;[Winbatch_uninstall_msi_64]
;msiexec /x $MsiId64$ /qb! REBOOT=ReallySuppress
 
[Files_uninstall_64]
; Example for recursively deleting the installation directory (don't forget the trailing backslash):
;
; delete -sf "$InstallDir64$\"
 
[Files_install_AllProfiles]
; meuk weghalen in "%UserProfileDir%\Application Data\Sun\"
delete -sf "%UserProfileDir%\Application Data\Sun\"
 
[Registry_uninstall]
deletekey [HKEY_LOCAL_MACHINE\Software\JreMetrics]
 
[Registry_uninstall_AllProfiles]
 
[LinkFolder_uninstall]
; Example of deleting a folder from AllUsers startmenu:
;
; set_basefolder common_programs
; delete_subfolder $ProductId$
;
; Example of deleting a shortcut from AllUsers desktop:
;
; set_basefolder common_desktopdirectory
; set_subfolder ""
; delete_element $ProductId$
 
[Sub_check_exitcode]
comment "Test for installation success via exit code"
set $ExitCode$ = getLastExitCode
; informations to exit codes see
; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx
; http://msdn.microsoft.com/en-us/library/aa368542.aspx
if ($ExitCode$ = "0")
	comment "Looks good: setup program gives exitcode zero"
else
	comment "Setup program gives a exitcode unequal zero: " + $ExitCode$
	if ($ExitCode$ = "1605")
		comment "ERROR_UNKNOWN_PRODUCT	1605	This action is only valid for products that are currently installed."
		comment "Uninstall of a not installed product failed - no problem"
	else
		if ($ExitCode$ = "1641")
			comment "looks good: setup program gives exitcode 1641"
			comment "ERROR_SUCCESS_REBOOT_INITIATED	1641	The installer has initiated a restart. This message is indicative of a success."
		else
			if ($ExitCode$ = "3010")
				comment "looks good: setup program gives exitcode 3010"
				comment "ERROR_SUCCESS_REBOOT_REQUIRED	3010	A restart is required to complete the install. This message is indicative of a success."
			else
				logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$
				isFatalError
			endif
		endif
	endif
endif
 
[Sub_searchApp32]
set $appKey$ = "[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + "$app$" + "] " + $appKeyString$
Set $testName$ = GetRegistryStringValue32($appKey$)
if contains($testName$,$appString$)
;	set $appKey$ = "[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + "$app$" + "] UninstallString"
;	Set $testName$ = GetRegistryStringValue32($appKey$)
	;if contains(lower($testName$),lower("MsiExec.exe"))
	set $UninstallCommandList$ = $UninstallCommandList$ + "MsiExec.exe /x " + "$app$" + " /qb-! REBOOT=ReallySuppress::"
	;else
	;	Set $testName$ = unquote($testName$,'"')
	;	Set $testName$ = unquote($testName$,"'")
	;	Set $exeString$ = takeString(0, splitString ($testName$, "exe"))
	;	set $UninstallCommandList$ = $UninstallCommandList$ + $exeString$ + "exe /S::"
	;endif
endif
 
[Sub_searchApp64]
set $appKey$ = "[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + "$app$" + "] " + $appKeyString$
Set $testName$ = GetRegistryStringValue64($appKey$)
if contains($testName$,$appString$)
;	set $appKey$ = "[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + "$app$" + "] UninstallString"
;	Set $testName$ = GetRegistryStringValue64($appKey$)
	;if contains(lower($testName$),lower("MsiExec.exe"))
	set $UninstallCommandList$ = $UninstallCommandList$ + "MsiExec.exe /x " + "$app$" + " /qb-! REBOOT=ReallySuppress::"
	;else
	;	Set $testName$ = unquote($testName$,'"')
	;	Set $testName$ = unquote($testName$,"'")
	;	Set $exeString$ = takeString(0, splitString ($testName$, "exe"))
	;	set $UninstallCommandList$ = $UninstallCommandList$ + '"' + $exeString$ + 'exe /S"::'
	;endif
endif