====== 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 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%\" ;Set $InstallDir64$ = "%ProgramFiles64Dir%\" ; ---------------------------------------------------------------- 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%\" ;Set $InstallDir64$ = "%ProgramFiles64Dir%\" ; ---------------------------------------------------------------- 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