A wrote 2 files for uninstallin All Java

---- java-uninstall.bat -----

REM <start>
@echo off
if not exist c:\temp\. mkdir c:\temp
REM Export the Uninstall registry keys
start /wait "" REGEDIT /E c:\temp\registry.tmp HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall
REM Filter only the {} keys that Java might be in
type c:\temp\registry.tmp | find /i "{" | find /i "}]" > c:\temp\uninstall.tmp
type c:\temp\registry.tmp | find /i "JRE 1" >> c:\temp\uninstall.tmp

REM Run the Vbscript that uses this file to find Java Sun entries to uninstall
cscript "java-uninstaller.vbs"
REM <end>


---- java-uninstall.bat -----

---- java-uninstaller.vbs -----

On Error Resume Next
Set WshShell = WScript.CreateObject("WScript.Shell")
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2
TempDir = "c:\temp"
TempISS = "c:\temp\iss"
LogFile = "uninst.log"
UnString = " -s -a /s /f1"
Set MyFile = fso.OpenTextFile(TempDir & "\uninstall.tmp", ForReading)
Set ts = fso.CreateTextFile(LogFile)
Set f = fso.CreateFolder(TempISS)

Do While MyFile.AtEndOfStream <> True
ReadLineTextFile = MyFile.ReadLine
Uninstall = ReadLineTextFile
CLSID = Mid(Uninstall, 73, 38)
search5 = Instr(Uninstall, "JRE 1")
search6 = Instr(Uninstall, "]")
If search5 > 0 AND search6 > 0 Then
JRE1 = Replace(Mid(Uninstall, search5, search6),"]","")
End If

'DisplayName
DisplayName=WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayName")
'Publisher
Publisher=WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\Publisher")

'UninstallString
UninstallString=WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\UninstallString")

'JREUninstallString
JREUninstallString=WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & JRE1 & "\UninstallString")

If JREUninstallString <> "" Then
JREUN = Replace(JREUninstallString," -f"," -s -a /s /f")
ts.writeline JREUN
Return = WshShell.Run(JREUN , 1, TRUE)
End If


'Search for presence of Java and Sun in DisplayName and Publisher
search1 = Instr(1, DisplayName, "Java", 1)
search2 = Instr(1, Publisher, "Sun", 1)
search3 = Instr(1, DisplayName, "J2SE", 1)
search4 = Instr(1, UninstallString, "setup.exe", 1)
'Execute removal if there is a match
Uninstaller="MsiExec.exe /X"&CLSID+" /QN"
if search1 > 0 or search3 > 0 and search2 > 0 Then
ts.writeline Uninstaller

Set iss = fso.CreateTextFile(TempISS & "\" & CLSID & ".iss")

'Create Response file for any Java Version
iss.writeline "[InstallShield Silent]"
iss.writeline "Version=v6.00.000"
iss.writeline "File=Response File"
iss.writeline "[File Transfer]"
iss.writeline "OverwrittenReadOnly=NoToAll"
iss.writeline "[" & CLSID & "-DlgOrder]"
iss.writeline "Dlg0=" & CLSID & "-SprintfBox-0"
iss.writeline "Count=2"
iss.writeline "Dlg1=" & CLSID & "-File Transfer"
iss.writeline "[" & CLSID & "-SprintfBox-0]"
iss.writeline "Result=1"
iss.writeline "[Application]"
iss.writeline "Name=Java 2 Runtime Environment, SE v1.4.0_01"
iss.writeline "Version=1.4.0_01"
iss.writeline "Company=JavaSoft"
iss.writeline "Lang=0009"
iss.writeline "[" & CLSID & "-File Transfer]"
iss.writeline "SharedFile=YesToAll"

If search4 > 0 Then
ss = Left(UninstallString,search4 + 9)
setupuninstal = ss & UnString & Chr(34) & TempISS & "\" & CLSID & ".iss" & Chr(34)
ts.writeline setupuninstal
Return = WshShell.Run(setupuninstal , 1, TRUE)
End If
Return = WshShell.Run(Uninstaller , 1, TRUE)
End If
Loop
MyFile.Close
fso.DeleteFolder(TempDir)


---- java-uninstaller.vbs -----

But it run only localy on the system

0 Comments   [ + ] Show Comments

Comments

Please log in to comment

Answers

Rating comments in this legacy AppDeploy message board thread won't reorder them,
so that the conversation will remain readable.
0

I initially wrote this PowerShell script to auto-update Java silently, but after some testing I came across various problematic scenarios which made me look into silent uninstalls, which have now been implemented in the script. There's an -UninstallFirst parameter that, if a new version of Java is found on the java.com website, will cause Java to be uninstalled, and the new version to be installed. There is also an -UninstallOnly parameter which is most relevant to this thread. The logic in these scripts in this thread relies in either Win32_Product or the registry being parsed for a string that matches something, and, if so, uninstall the product/application.

Due to the issues mentioned with Win32_Product (it actually checks all installed products' integrity, and thus is slow, and potentially even harmful), I parse the registry, as the initial poster of the scripts does.

The string is a wildcard string, as interpreted by the -Like operator in PowerShell, and is configurable in the accompanying configuration file (technically you could use this script to uninstall any product with the uninstall string and using the -UninstallOnly parameter).

More information can be found in the article about the script here: http://www.powershelladmin.com/wiki/PowerShell_Java_Auto-Update_Script

Answered 11/24/2013 by: joakimbs
White Belt

Please log in to comment
0

I've taken an approach suggested by a few people to use a WMI query but I've wrapped it up in a full powershell script that will find all 6 and 7 versions of JRE and uninstall them without any unexpected reboots from the Uninstall() method.

Its a short and clean script that will work for any Update version including any new ones that come out from Oracle.

 

See the full blog post and script at my blog site: http://24by7365.wordpress.com/2013/08/08/1823/

Answered 08/20/2013 by: keyrage
White Belt

Please log in to comment
-2

Fantastic !  I tested with having 3 different versions of Java installed (7.4, 6.39 and 5.12)

I ran this code in a batch file to uninstall all 3 versions. (Ran from an administrative level command prompt.) Will test running as a task sequence to install the lattest version after this batch file.

@ECHOOFF
cls
TITLE Uninstalling Java 6 and 7... (x86 and x64 versions)
START /WAIT /MIN WMIC product where "Name LIKE '%%J2SE Runtime%%'" call uninstall /nointeractive
START /WAIT /MIN WMIC product where "Name LIKE '%%Java%%'" call uninstall /nointeractive
goto END

:END
exit
Answered 04/04/2013 by: KevinViolette
Second Degree Black Belt

  • Looks good! I'll have to implement this one and simplify my Java removal scripts. Thank you!

    • Note: i removed the "pause" at the end of the script....it was causing problems when deploying with SCCM.

      • Are you not worried about the MSIInstaller reconfiguring the products when you use the Win32_Product class? Is this not an issue anymore, or did people just forget about this issue with the class?

Please log in to comment
2

This is nice scripting, but i found it way to many lines, for what is worth it.

I know that WMI has nice features, so i went to search a script for uninstall all our old Java version (this peace of software realy sucks didn't it?)

So here my small script :

 @ECHOOFF
cls
TITLE Uninstalling Java 6... (x86 and x64 versions)

wmic product where "name like 'Java(TM) 6%%'" call uninstall /nointeractive
goto END

:END
pause
exit

And its magic, but it works !

Tested it on XP / Vista / W7 in some cases there was even a JRE7 version installed yet.

So i think many people will love this :D

 

hf + leave some remarks

Answered 03/21/2013 by: dimitridelanghe
White Belt

Please log in to comment
2

this is cool, but i thought it was way to many scripting, i did know that wmi has superb lines.

I tested some and look at this : 

  @ECHOOFF
cls
TITLE Uninstalling Java 6... (x86 and x64 versions)

wmic product where "name like 'Java(TM) 6%%'" call uninstall /nointeractive
goto END

:END
pause
exit
I have tested in XP / vista / W7 and it all works ! 
Answered 03/21/2013 by: dimitridelanghe
White Belt

Please log in to comment
0

I am having trouble decoding this part of your script 

 

if %ERRORLEVEL% == 0 start /w %~dp0\MSJavx86.exe /c:"javatrig.exe /exe_install /l /q /qq" /q:a 

/r:n
%~dp0\jre-6u29-windows-i586-s.exe /s /v"AgreeToLicense=YES IEXPLORER=0 MOZILLA=0 REBOOT=SUPRESS 

JAVAUPDATE=0"
 
Is this required?
%~dp0\MSJavx86.exe /c:"javatrig.exe /exe_install /l /q /qq" /q:a /r:n

 

Answered 06/20/2012 by: travisray2004
Senior Yellow Belt

  • Hi Travis no it wouldn't be required, that's just if you need java virtual machine on older windows XP installations.

Please log in to comment
0

Thanks, I could only post it under notes for JRE6U29, hope this is okay.

Answered 02/28/2012 by: SpellJammer
Orange Belt

Please log in to comment
0

Good work! Have you posted this to the 'Package KB'? If not, please do.

Answered 02/28/2012 by: VBScab
Red Belt

Please log in to comment
0

A colleague and I struggled with this for months. We had multiple JRE versions in our organisation and needed to standardise on a single version (JRE6U29). Something else that complicated our situation was that we were running Oracle which relied on Jinitiator versions 22 and 26. Now if anyone is familiar with these systems, you would most likely be familiar with the JVM.dll issue where one has to overwrite the jinitator JVM.dll with the JRE jvm.dll file. We also needed to untick the Enable Next Generation plugin, the IE Java Applet, Hide The Java Console, Never Check For Updates, Hide The Updates Tab and Enable Hide Warning and Run With Protections under mixed mode security. We automated all of these settings with registry keys and using a deployments.properties file and a deployment.config file which is very useful. Read more info relating to this here:

http://docs.oracle.com/javase/6/docs/technotes/guides/deployment/deployment-guide/properties.html

Since we still run XP and IE7, we also had to reinstall Java Virtual machine on all of our workstations which we included in our script as well as the copying of the Oracle Jinitator JVM.dll files.

The sequence of our Script is as follows:


1. Killing IE and Java processes
2. Uninstalling all previous versions of JRE using a VB Script by means of WMI
3. Clearing the registry of the Javasoft string as this leaves traces of old versions despite uninstalling.
4. Installing Java Virtual Machine
5. Installing JRE6U29
6. Creating C:\Windows\Sun\Java\Deployment directory to copy deployment. Properties and config file.
7. Copying deployment and config files to C:\Windows\Sun\Java\Deployment
8. Backing up and renaming jvm.dll file
9. Copying new JVM.dll file
10. Disable Java plugin
11. Disable Java Auto update Tab in the Java Control panel.

Our Script Has Two Parts.

1. Batch script executed to kill processes then runs the VB script.
2. VB script uninstalls all versions of JRE then resumes the next step of the batch script

Batch Script
@echo off
cd\
cls

@ECHO Version 1.0
@ECHO Uninstall of All JRE Versions And Installation Of JRE6U29

@ECHO Authors: Nainesh Bhavan & Dylan Ogle November 2011

:KillIE&JavaProcesses
echo *** This will kill IE and Java Processes ***
Rem ***
taskkill /F /IM iexplorer.exe
taskkill /F /IM iexplore.exe
taskkill /F /IM javaw.exe
taskkill /F /IM jqs.exe
taskkill /F /IM jusched.exe

:UninstallingOldJREVersions
cd\
cls
echo *** This will uninstall older versions of JRE ***
Rem ***
call cscript %~dp0\JRERemove.vbs

:Backup&ClearRegistryForJavaSoft
start /w regedit /e "%systemroot%\JavaSoftRegBackup.reg" HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft /f

:InstallJREVersion29
cd\
cls
echo *** This installs Java 6 Update 29  ***
Rem ***
ver | find "XP" > nul
if %ERRORLEVEL% == 0 start /w %~dp0\MSJavx86.exe /c:"javatrig.exe /exe_install /l /q /qq" /q:a

/r:n
%~dp0\jre-6u29-windows-i586-s.exe /s /v"AgreeToLicense=YES IEXPLORER=0 MOZILLA=0 REBOOT=SUPRESS

JAVAUPDATE=0"

:Copying Configuration Properties Files
cd\
cls
echo *** This creates a backup of current JVM.DLL ini JINIT folders ***
Rem ***
if not exist "C:\Windows\Sun\Java\Deployment" MD "C:\Windows\Sun\Java\Deployment"
copy %~dp0\deployment.config "C:\Windows\Sun\Java\Deployment" /y
copy %~dp0\deployment.properties "C:\Windows\Sun\Java\Deployment" /y

:BackupDLL
cd\
cls
echo *** This creates a backup of current JVM.DLL ini JINIT folders ***
Rem ***
if exist "C:\Program Files\Oracle\JInitiator 1.3.1.18\bin\hotspot\jvm.dll" ren "C:\Program

Files\Oracle\JInitiator 1.3.1.18\bin\hotspot\jvm.dll" jvm.dll-old
if exist "C:\Program Files\Oracle\JInitiator 1.3.1.22\bin\hotspot\jvm.dll" ren "C:\Program

Files\Oracle\JInitiator 1.3.1.22\bin\hotspot\jvm.dll" jvm.dll-old
if exist "C:\Program Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll" ren "C:\Program

Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll" jvm.dll-old
if exist "C:\Program Files\Oracle\JInitiator 1.3.1.28\bin\hotspot\jvm.dll" ren "C:\Program

Files\Oracle\JInitiator 1.3.1.28\bin\hotspot\jvm.dll" jvm.dll-old

:CopyDLL
cd\
cls
echo *** Copying JVM.DLL File JINIT Folders ***
Rem ***
if exist "C:\Program Files\Oracle\JInitiator 1.3.1.18\bin\hotspot\jvm.dll-old" copy %~dp0\Fix

\jvm.dll "C:\Program Files\Oracle\JInitiator 1.3.1.18\bin\hotspot\"
if exist "C:\Program Files\Oracle\JInitiator 1.3.1.22\bin\hotspot\jvm.dll-old" copy %~dp0\Fix

\jvm.dll "C:\Program Files\Oracle\JInitiator 1.3.1.22\bin\hotspot\"
if exist "C:\Program Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll-old" copy %~dp0\Fix

\jvm.dll "C:\Program Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\"
if exist "C:\Program Files\Oracle\JInitiator 1.3.1.28\bin\hotspot\jvm.dll-old" copy %~dp0\Fix

\jvm.dll "C:\Program Files\Oracle\JInitiator 1.3.1.28\bin\hotspot\"

:DisableJavaPlugin
cd\
cls
echo *** This will disable next generation Java Plugin in Control Panel
Rem ***
regedit.exe -s %~dp0\DisableJavaPlugin.reg


:DisableJavaAutoUpdate
cd\
cls
echo *** This will disable next generation Java Plugin in Control Panel
Rem ***
REG.EXE ADD "HKLM\SOFTWARE\JavaSoft\Java Update\Policy" /v EnableJavaUpdate /t REG_DWORD /d 0 /f
REG.EXE ADD "HKLM\SOFTWARE\JavaSoft\Java Update\Policy" /v EnableAutoUpdateCheck /t REG_DWORD /d

0 /f
REG.EXE ADD "HKLM\SOFTWARE\JavaSoft\Java Update\Policy" /v NotifyDownload /t REG_DWORD /d 0 /f
REG.EXE ADD "HKLM\SOFTWARE\JavaSoft\Java Update\Policy" /v NotifyInstall /t REG_DWORD /d 0 /f
REG.EXE DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v SunJavaUpdateSched /f


VB Uninstall Script. Simple and Elegant :)

'###########Script Written By Dylan Ogle & Nainesh Bhavan - November 2011##########


'Start Script

On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

'Uninstall Java 2 Runtime Environment, J2SE Runtime Environment
Set colJava4dot3 = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'Java 2 Runtime Environment Standard Edition %'")
For Each objSoftware in colJava4dot3
objSoftware.Uninstall()
Next


'Uninstall Java 2 Runtime Environment, J2SE Runtime Environment
Set colJava4dot3 = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'J2SE Runtime Environment %'")
For Each objSoftware in colJava4dot3
objSoftware.Uninstall()
Next

'Uninstall Java 2 Runtime Environment, SE *
Set colJava4dot3 = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'Java 2 Runtime Environment, SE %'")
For Each objSoftware in colJava4dot3
objSoftware.Uninstall()
Next

'Uninstall Java(TM) 6 Update *
Set colJava6dot = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'Java(TM) 6 Update %'")
For Each objSoftware in colJava6dot
objSoftware.Uninstall()
Next

'Uninstall Java(TM) 7 Update *
Set colJava6dot = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'Java(TM) 7 Update %'")
For Each objSoftware in colJava6dot
objSoftware.Uninstall()
Next

'Uninstall Java(TM) 7 *
Set colJava7 = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'Java(TM) %'")
For Each objSoftware in colJava7
objSoftware.Uninstall()
Next




We also used the following reg keys to automate ticks as part of the installation for our enviroment:

******Disable Auto Update*************


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


******Disable Java Plugin*************

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Plug-in\1.6.0_29]
"UseNewJavaPlugin"=dword:00000000
"UseJava2IExplorer"=dword:00000000

******Deleteing Javasoft Key Prior to installation of New JRE client*************

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft]

*******************************************************************


Keep in mind that these locations will obviously differe for different versions but the subdirectories should more or less be the same.

Our Deployment.config and Properties files that get copied to C\:/WINDOWS/Sun/Java/Deployment

http://docs.oracle.com/javase/6/docs/technotes/guides/deployment/deployment-guide/properties.html


Deployment.config
deployment.system.config=file\:C\:/WINDOWS/Sun/Java/Deployment/deployment.properties


Deployment.properties

deployment.javaws.autodownload=NEVER
deployment.javaws.autodownload.locked=
deployment.security.mixcode=HIDE_RUN
deployment.security.mixcode.locked=
deployment.console.startup.mode=HIDE
deployment.console.startup.mode.locked=

A nice final touch to this script would be for somebody to add some kind of validation to check whether the version that you are wanting to install exists on the machine and if so, only do the automations for the various ticks to the Vb portion of the script. We packaged our script with exports of our reg keys and deployment files with winrar and deployed to all of our workstations using Config Manager without any hassles. Our next challenge is finding a way to silently uninstall all versions of Jinitiator.

Hopefully some of you will find this useful.

Answered 02/28/2012 by: SpellJammer
Orange Belt

  • I was using the uninstall script listed here, the one that uses the Win32_Product query, then I tried it on a Windows 7 machine and found that this method has some serious drawbacks.  Please take a look at the following post that explains the issue.

    http://blogs.technet.com/b/heyscriptingguy/archive/2011/11/13/use-powershell-to-quickly-find-installed-software.aspx

    For the lazy, here is a quote.

    "The Win32_product class is not query optimized. Queries such as “select * from Win32_Product where (name like 'Sniffer%')” require WMI to use the MSI provider to enumerate all of the installed products and then parse the full list sequentially to handle the “where” clause:,

        This process initiates a consistency check of packages installed, and then verifying and repairing the installations.
        If you have an application that makes use of the Win32_Product class, you should contact the vendor to get an updated version that does not use this class.

    On Windows Server 2003, Windows Vista, and newer operating systems, querying Win32_Product will trigger Windows Installer to perform a consistency check to verify the health of the application. This consistency check could cause a repair installation to occur. You can confirm this by checking the Windows Application Event log."

  • Hi stompro, my script was only intended for Windows XP but if you incorporate dimitridelanghe's uninstall method adding a wildcard for version 7 should you need to uninstall certain of these versions as well then it would compliment my script perfectly for windows 7.

Please log in to comment
0

I would like to share a batch script I created to execute this script. Just in case you're in a small company without AD or any other advanced methods of deployment. As long as you have psexec you can setup machine profiles via txt files and push the removal and installation of JAVA via the vbs script. For your group lists, name them GROUPusers.txt, where GROUP=a group name you would like to assign to the machines in that list. Then when you create the lists, you can use the machine names, entering each one on a new line.

EDIT: I used LabDeploy's posted script from 4/24/2011 9:30:00 PM

EDIT: Removed the multiLists variable and created a check against the _groups variable. So you no longer have to specify that its a multi-group list, it checks the _groups variable on its own and performs the correct operation.

:: Author:        Mechaflash
:: Created:        02/07/12
:: Script Function:
::    Java Uninstall Old Versions and Install New Version

SETLOCAL ENABLEDELAYEDEXPANSION
SET WAIT=PING localhost -n
SET seconds= -w 1000

SET _path=C:\Path\To\Machinelists
SET _tmp=C:\Path\To\Machinelists\TMPlist.txt
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::                                              ::
::                    SETUP                          ::
::                                              ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
REM Available groups:                                   
:: ALL,TEST,ACCT,ADMIN,TECH                       

REM Set '_groups' for which group of users you want to run the command against.
::  For example: SET _groups=TEST,ACCT,TECH
::  Or  example: SET _groups=ALL
SET _groups=TEST,ACCT,TECH

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: ---------------------------------- PROGRAM START -------------------------------------

:MULTI_GROUP_CHECK
SET _groupCount=0
FOR %%A IN (%_groups%) DO (
  SET /A _groupCount+=1
)
IF [%_groupCount%] GTR [1] (
      IF EXIST "%_tmp%" DEL /Q /F "%_tmp%"
      SET _file=%_tmp%
      IF NOT EXIST "%_tmp%" COPY /Y nul "%_tmp%"
  %WAIT% 1 %seconds%
  FOR %%A IN (%_groups%) DO (
      IF [%%A] GTR [] (TYPE "%_path%\%%Ausers.txt">>"%_tmp%") ELSE (GOTO:OUT)
      %WAIT% 2 %seconds%
      )
) ELSE (
      SET _file=%_groups%
)
:OUT

C:\psexec.exe @%_file% -u admin -p adminPassword cmd.exe /C "CSCRIPT /NOLOGO C:\Path\To\JavaUninstaller.vbs"

IF EXIST "%_tmp%" DEL /Q /F "%_tmp%"

GOTO:EOF

:: ----------------------------------- PROGRAM END --------------------------------------

Answered 02/08/2012 by: mechaflash
Yellow Belt

Please log in to comment
1

This is what I ended up doing:

rem in case of broken old install
copy /y regutils.dll "C:\Program Files (x86)\Java\jre6\bin\"

rem breaks install if run twice!  2nd to last 2 numbers is version
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F83216030FF}
if errorlevel 1 start /wait msiexec.exe /i jre1.6.0_30.msi /qn

rem check it's there and return error code
dir "C:\Program Files (x86)\Java\jre6\bin\new_plugin\npjp2.dll"


Great wmic tip.  How about this for uninstalling all versions?

wmic product where "name like 'Java(TM) 6 Update %'" call uninstall

Answered 01/25/2012 by: tamahome
Purple Belt

  • Tamahomer has the right idea. Make it simple. Get rid of it all: All Java 5,6,7 gone. 2 lines of code.
    START /WAIT /MIN WMIC product where "Name LIKE '%%J2SE Runtime%%'" call uninstall /nointeractive
    START /WAIT /MIN WMIC product where "Name LIKE '%%Java%%'" call uninstall /nointeractive

Please log in to comment
-1

Immensely useful discussion and code. Thanks all!

Answered 01/25/2012 by: yossiz74
Yellow Belt

Please log in to comment
0

wmic product where name="Java(TM) 6 Update 29" call uninstall  [;)]

Answered 01/16/2012 by: rpmax600
Senior Yellow Belt

Please log in to comment
1

It seems the Uninstall GUID in registry is based on the version with a common part of the GUID, so that might also be a way to test/uninstall. I tried googling for a complete list of JAVA versions and GUID's with not much luck (thanks Oracle...). Maybe someone can use this info as well.

For JRA6 the common part seems to be: {26A24AE4-039D-4CA4-87B4-2F8321*
Older versions seems to use: {3248F0A8-6813-11D6-A77B-00B0D0*

An example for JRE6 Update 30:


Set JREVersion=60
Set JREUpdate=30
Set JAVAUninstallKey={26A24AE4-039D-4CA4-87B4-2F8321%JREVersion%%JREUpdate%FF}
Set UninstallGUID=Start /Wait MsiExec.exe /qb- /norestart /x

%UninstallGUID% %JAVAUninstallKey%


Some GUID examples I found online:
{7148F0A8-6813-11D6-A77B-00B0D0142000}
{7148F0A8-6813-11D6-A77B-00B0D0142010}
{7148F0A8-6813-11D6-A77B-00B0D0142020}
{7148F0A8-6813-11D6-A77B-00B0D0142030}
{7148F0A8-6813-11D6-A77B-00B0D0142040}
{7148F0A8-6813-11D6-A77B-00B0D0142050}
{7148F0A8-6813-11D6-A77B-00B0D0142060}
{7148F0A8-6813-11D6-A77B-00B0D0142070}
{7148F0A8-6813-11D6-A77B-00B0D0142080}
{7148F0A8-6813-11D6-A77B-00B0D0142090}
{7148F0A8-6813-11D6-A77B-00B0D0142100}
{7148F0A8-6813-11D6-A77B-00B0D0142110}
{7148F0A8-6813-11D6-A77B-00B0D0142120}
{7148F0A8-6813-11D6-A77B-00B0D0142130}
{7148F0A8-6813-11D6-A77B-00B0D0142140}
{7148F0A8-6813-11D6-A77B-00B0D0142150}
{7148F0A8-6813-11D6-A77B-00B0D0142160}
{3248F0A8-6813-11D6-A77B-00B0D0150000}
{3248F0A8-6813-11D6-A77B-00B0D0150010}
{3248F0A8-6813-11D6-A77B-00B0D0150020}
{3248F0A8-6813-11D6-A77B-00B0D0150030}
{3248F0A8-6813-11D6-A77B-00B0D0150040}
{3248F0A8-6813-11D6-A77B-00B0D0150050}
{3248F0A8-6813-11D6-A77B-00B0D0150060}
{3248F0A8-6813-11D6-A77B-00B0D0150070}
{3248F0A8-6813-11D6-A77B-00B0D0150080}
{3248F0A8-6813-11D6-A77B-00B0D0150090}
{3248F0A8-6813-11D6-A77B-00B0D0150100}
{3248F0A8-6813-11D6-A77B-00B0D0150110}
{3248F0A8-6813-11D6-A77B-00B0D0150120}
{3248F0A8-6813-11D6-A77B-00B0D0150130}
{3248F0A8-6813-11D6-A77B-00B0D0150140}
{3248F0A8-6813-11D6-A77B-00B0D0160000}
{3248F0A8-6813-11D6-A77B-00B0D0160010}
{3248F0A8-6813-11D6-A77B-00B0D0160020}
{3248F0A8-6813-11D6-A77B-00B0D0160030}
{3248F0A8-6813-11D6-A77B-00B0D0160040}
{3248F0A8-6813-11D6-A77B-00B0D0160050}
{3248F0A8-6813-11D6-A77B-00B0D0160060}
{3248F0A8-6813-11D6-A77B-00B0D0160070}
{3248F0A8-6813-11D6-A77B-00B0D0160080}
{3248F0A8-6813-11D6-A77B-00B0D0160090}

{26A24AE4-039D-4CA4-87B4-2F83216010FF}
{26A24AE4-039D-4CA4-87B4-2F83216011FF}
{26A24AE4-039D-4CA4-87B4-2F83216012FF}
{26A24AE4-039D-4CA4-87B4-2F83216013FF}
{26A24AE4-039D-4CA4-87B4-2F83216014FF}
{26A24AE4-039D-4CA4-87B4-2F83216015FF}
{26A24AE4-039D-4CA4-87B4-2F83216016FF}
{26A24AE4-039D-4CA4-87B4-2F83216017FF}
{26A24AE4-039D-4CA4-87B4-2F83216018FF}
{26A24AE4-039D-4CA4-87B4-2F83216019FF}
{26A24AE4-039D-4CA4-87B4-2F83216020FF}

/Nicolaj

Answered 01/04/2012 by: drlandau
Yellow Belt

Please log in to comment
0

I ran into a big problem with this script in my environment. It doesn't properly detect the currently installed version as current. It attempts to run in the Java installer again, and when it does, it breaks the installation. The only way I've been able to fix this is to go machine to machine by hand, install the Windows Installer Cleanup Utility, and force remove the application.

Looks like this is going to be our procedure for 300 PCs every time there's an update to Java.

Trying really hard to suppress my hatred for Oracle at the moment.

Answered 10/17/2011 by: jfisher
Yellow Belt

Please log in to comment
0

Hi, this is really a good script. But can't it be made so that it install the version you have specified, as this example I have found.

The example works fine on xp but destroy the java in winodws 7 (if it is run more than 1 time.) it, can't see the version that are installed.




'# Galen Dobbs - 13:20 23/03/2009
'# Uninstalls all but the chosen version of Java Runtime.
'# If the current version is not installed, it installs it from the specified path.
'# Based on a script by 'Daz' from Appdeploy.com message boards.
'# http://itninja.com/question/stopping-a-service09


Option Explicit

Dim wshShell, fso, strLogFile, ts, strTempDir, strTempISS, strUnString, tsIn
Dim strUninstLine, CLSID, search5, search6, search7, strJRE1, strDisplayName, strDisplayVersion
Dim strPublisher, strUninstallString, strJREUninstallString, strJREDisplayName
Dim search1, search2, search3, search4, strJREUninstallStringNEW, ret, strUninstCMD
Dim tsISS, strSetupexe, qVal, strComputername, strCurrentVersion, strInstallMST
Dim searchCurVer, CurVerFound, strArrayCount, strLogPath, strInstallCMD, strInstallMSI, strInstallLog

Dim arrayJREDisplayName()
Dim arrayJREUninstallString()

'# Change this to match the version that you don't want to have it uninstall
strCurrentVersion = "Java(TM) 6 Update 27"

'# Set these to the desired log path and current version installer location
strLogPath = "\\serv08\Log$\Logoff\JavaLog\"
strInstallMSI = "\\serv08\alle$\Brian Kudsk EDB\Install\Java\jre1.6.0_27.msi"
strInstallMST = "\\serv08\alle$\Brian Kudsk EDB\Install\Java\sp1033.mst"

qVal = 0
strArrayCount = 0
ReDim arrayJREDisplayName(strArrayCount)
ReDim arrayJREUninstallString(strArrayCount)

Set wshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

strComputername = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

'# Set this to the appropriate command line settings to do a silent MSI install
strInstallLog = strLogPath & "Java_Install_" & strComputername & ".log"
strInstallCMD = "msiexec /I """ & strInstallMSI & """ /t """ & strInstallMST & """ /QN /Lime """ & strInstallLog & """"

If Not fso.FolderExists(strLogPath) Then fso.CreateFolder(strLogPath)
strLogFile = strLogPath & "Java_Uninstall_" & strComputername & ".log"
Set ts = fso.OpenTextFile(strLogFile, 8, True)

ts.WriteLine String(120, "_")
ts.WriteLine String(120, "¯")
ts.WriteLine Now() & " - Java Runtime(s) uninstallation started..."
ts.WriteLine String(120, "_") & vbCrlf

'# Generate Registry extracts from 'Uninstall' keys.
PreFlight()

'# Kill Java Processes
KillProc()

strTempDir = wshShell.ExpandEnvironmentStrings("%temp%")
strTempISS = strTempDir & "\iss"
strUnString = " -s -a /s /f1"
Set tsIn = fso.OpenTextFile(strTempDir & "\uninstall.tmp", 1)

If Not fso.FolderExists(strTempISS) Then fso.CreateFolder(strTempISS)

Do While Not tsIn.AtEndOfStream
    strUninstLine = tsIn.ReadLine
    CLSID = Mid(strUninstLine, 73, 38)
    search5 = Instr(strUninstLine, "JRE 1")
    search6 = Instr(strUninstLine, "]")
    If search5 > 0 AND search6 > 0 Then
        strJRE1 = Replace(Mid(strUninstLine, search5, search6),"]","") 
    End If

    On Error Resume Next

    strDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayName")
    strDisplayVersion = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayVersion")
    strPublisher = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\Publisher")
    strUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\UninstallString")

    strJREUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\UninstallString")
    strJREDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\DisplayName")

    On Error Goto 0

    'Search for presence of Java and Sun in DisplayName and Publisher
    search1 = Instr(1, strDisplayName, "Java", 1)
    search2 = Instr(1, strPublisher, "Sun", 1)
    search3 = Instr(1, strDisplayName, "J2SE", 1)
    search4 = Instr(1, strUninstallString, "setup.exe", 1)
    search7 = InStr(1, strDisplayName, "Development", 1) + InStr(1, strDisplayName, "Java DB", 1)

    'See if it is the current version
    searchCurVer = InStr(1, strDisplayName, strCurrentVersion, 1)

    'If it is, Show that the current version is found
    If searchCurVer > 0 Then
    CurVerFound = True

    ElseIf strJREUninstallString <> "" Then
        '# JRE 1 found
        strJREUninstallStringNEW = Replace(strJREUninstallString," -f"," -s -a /s /f")
    redim Preserve arrayJREDisplayName(strArrayCount)
    redim Preserve arrayJREUninstallString(strArrayCount)
        arrayJREDisplayName(strArrayCount) = " - Found Old JRE: " & strDisplayName & "  - Version: " & strDisplayVersion & ", Uninstalling..."
    arrayJREUninstallString(strArrayCount) = strJREUninstallStringNEW
    strArrayCount = strArrayCount + 1

    ElseIf search7 = 0 And search1 > 0 Or search3 > 0 And search2 > 0 Then
        strUninstCMD = "msiexec.exe /x " & CLSID & " /norestart /qn"

        If search4 > 0 Then
            '# Old InstallShield setup found
            Set tsISS = fso.OpenTextFile(strTempISS & "\" & CLSID & ".iss", 2, True)

            'Create Response file for any Java Version
            tsISS.WriteLine "[InstallShield Silent]"
            tsISS.WriteLine "Version=v6.00.000"
            tsISS.WriteLine "File=Response File"
            tsISS.WriteLine "[File Transfer]"
            tsISS.WriteLine "OverwrittenReadOnly=NoToAll"
            tsISS.WriteLine "[" & CLSID & "-DlgOrder]"
            tsISS.WriteLine "Dlg0=" & CLSID & "-SprintfBox-0"
            tsISS.WriteLine "Count=2"
            tsISS.WriteLine "Dlg1=" & CLSID & "-File Transfer"
            tsISS.WriteLine "[" & CLSID & "-SprintfBox-0]"
            tsISS.WriteLine "Result=1"
            tsISS.WriteLine "[Application]"
            tsISS.WriteLine "Name=Java 2 Runtime Environment, SE v1.4.0_01"
            tsISS.WriteLine "Version=1.4.0_01"
            tsISS.WriteLine "Company=JavaSoft"
            tsISS.WriteLine "Lang=0009"
            tsISS.WriteLine "[" & CLSID & "-File Transfer]"
            tsISS.WriteLine "SharedFile=YesToAll"
            tsISS.Close

            strSetupexe = Left(strUninstallString, search4 + 9)
            strUninstCMD =  strSetupexe & strUnString & Chr(34) & strTempISS & "\" & CLSID & ".iss" & Chr(34)
        End If

    redim Preserve arrayJREDisplayName(strArrayCount)
    redim Preserve arrayJREUninstallString(strArrayCount)
    arrayJREDisplayName(strArrayCount) = " - Found Old JRE: " & strDisplayName & "    - Version: " & strDisplayVersion & ", Uninstalling..."
    arrayJREUninstallString(strArrayCount) = strUninstCMD
    strArrayCount = strArrayCount + 1

    End If

Loop

tsIn.Close

Dim I
If CurVerFound AND strArrayCount > 0 Then
    ts.Writeline Now() & " - Current Version: " & strCurrentVersion & " found, continuing with uninstalls..."
    For I = LBOUND(arrayJREDisplayName) to UBOUND(arrayJREDisplayName)
        ts.WriteLine Now() & arrayJREDisplayName(I)
        ts.WriteLine Now() & " - Uninstall String sent: " & arrayJREUninstallString(I)
        ret = wshShell.Run(arrayJREUninstallString(I) , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1
    Next

ElseIf CurVerFound AND strArrayCount = 0 Then
    ts.WriteLine Now() & " - Current version, " & strCurrentVersion & ", found." 
    ts.WriteLine Now() & " - No Old Java Runtime versions are installed."
    qVal = 99

ElseIf Not CurVerFound Then

    ts.WriteLine Now() & " - Current Java version, " & strCurrentVersion & ", not found, installing it."
    ts.WriteLine Now() & " - Running Command: " & strInstallCMD
    ret = wshShell.Run(strInstallCMD , 0, True)
    If ret <> 0 AND ret<> 3010 Then
        ts.WriteLine Now() & " - Failed to Install Java, see " & strInstallLog & " for more details.  Exiting Script."
        qVal = 1
    ElseIf strArrayCount > 0 Then
        ts.WriteLine Now() & " - Successfully installed " & strCurrentVersion & ", and logged to " & strInstallLog & "."
        For I = LBOUND(arrayJREDisplayName) to UBOUND(arrayJREDisplayName)
        ts.WriteLine Now() & arrayJREDisplayName(I)
        ts.WriteLine Now() & " - Uninstall String sent: " & arrayJREUninstallString(I)
        ret = wshShell.Run(arrayJREUninstallString(I) , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1
    Next
    ElseIf strArrayCount = 0 Then
      ts.WriteLine Now() & " - Successfully installed " & strCurrentVersion & ", and logged to " & strInstallLog & "."
    ts.WriteLine Now() & " - No Old Java Runtime versions are installed."
        qVal = 99
    End If
End If

ts.WriteLine String(120, "_")
ts.WriteLine String(120, "¯")
ts.Close
fso.DeleteFolder(strTempISS)
fso.DeleteFile(strTempDir & "\uninstall.tmp")

WScript.Quit(qVal)

Sub PreFlight()
    '# Creates temp files containing extracts from registry 'Uninstall' keys.
    Dim wshShell, fso, sTemp
    Set wshShell = CreateObject("WScript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    sTemp = wshShell.ExpandEnvironmentStrings("%temp%")
    wshShell.Run "REGEDIT /E %temp%\registry.tmp HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""{"" | find /i ""}]"" > %temp%\uninstall.tmp ", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""JRE 1"" >> %temp%\uninstall.tmp ", 0, True
    If Not fso.FileExists(sTemp & "\uninstall.tmp") Then
        ts.WriteLine Now() & " - No input - %temp%\uninstall.tmp Reg extract not created."
        ts.WriteLine String(120, "_")
        ts.WriteLine String(120, "¯")
        ts.Close
        WScript.Quit(1)
    End If
End Sub

Sub KillProc()
    '# kills jusched.exe and jqs.exe if they are running.  These processes will cause the installer to fail.
    Dim wshShell
    Set wshShell = CreateObject("WScript.Shell")
    wshShell.Run "Taskkill /F /IM jusched.exe /T", 0, True
    wshShell.Run "Taskkill /F /IM jqs.exe /T", 0, True
End Sub

Answered 09/18/2011 by: serverkudsk
Yellow Belt

  • I've added to your code to remove the current versions that starts with JRE 7* sting.

    wshShell.Run "cmd /c type %temp%\registry6432.tmp | find /i ""JRE 7"" >> %temp%\uninstall.tmp ", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""JRE 7"" >> %temp%\uninstall.tmp ", 0, True

Please log in to comment
0
ORIGINAL: pjgeutjens

it wants me to click to allow the executable to run (get a security warning).

Right-click the file that's throwing this warning, go to properties and see if there's an "Unblock" button. If there is, click it.
Another option is to try notepad <your file>:Zone.Identifier, this will show you the stream containing this value.

This has to do with the file's ZoneIdentifier telling windows it comes from an untrusted location

PJ





http://technet.microsoft.com/en-us/sysinternals/bb897440
Answered 08/24/2011 by: victormr
Senior Yellow Belt

Please log in to comment
0

Yes, I probably should have pointed out it requires admin rights to run.

It's really best to run this script with a batch file. Frankly I never have much luck trying to run a VBS with parameters in SCCM, the parameters never take quite right for me. I also never run install or uninstall packages when a user is logged in. There's too many chances something the user does screws up the package (reboots, shutdown, is running a browser instance that blocks the plugin update, etc.). That's just me though and I'm a bit paranoid about my SCCM deployments.

You might want to make a package with the script and a CMD to run it in the SCCM program settings. (Please note I haven't actually tested this code, it's off the top of my head for example purposes. I'm also a logging freak if you can't tell.) Like so:


MD "%SYSTEMDRIVE%\SomePathToLogs"
cscript /nologo JavaUninstallScript.vbs /keeponly /versions:"Java(TM) 6 Update 25" /logfilepath:"%SYSTEMDRIVE%\SomePathToLogs" >> "%SYSTEMDRIVE%\SomePathToLogs\JavaUninstallLog.txt"

Answered 04/29/2011 by: LabDeploy
Senior Yellow Belt

Please log in to comment
0

I have tested this script on a VM with 3 different versions installed and it works pretty good.  It took me a while to figure out I had to run it from and Administrative Command Window, but once I did that it worked really well.  I have to ask now how you guys are running this with SCCM.  I thought it would be fairly simple, but what I did ended up not working.

I created a package with no source files.  For the program for that package I put this in the command line  cscript /nologo \\SCCMSERVER\source$\apps\javauninstallscript.vbs /keeponly /versions:"Java(TM) 6 Update 25"  I have it set to run hidden and gave it run as administrator when a user is logged on.  Can someone enlighten my on the error of my ways.

Thanks

Answered 04/28/2011 by: EKutsko
Yellow Belt

Please log in to comment
0

Newbie question. How exactly do I run this script?

Answered 04/25/2011 by: hahnwo
Yellow Belt

Please log in to comment
2

Well, I meant to post this sooner but between work and getting sick it got delayed. Version 3.0 of the script can keep OR remove only specific versions of Java! It also runs on command line parameters now! This one hasn't been as extensively tested as the other scripts since I'm not using it in production. As always with a script on the Internet use with caution and at your own risk!


'***************************************************************************************
'Java removal script.
'Version: 3.0
'Description: Removes specified Java versions based on command line parameters.
'                        !!!!!!USE AT YOUR OWN RISK!!!!!!!
'2011.03.09 - 2.0 - First version. Assumes %SYSTEMDRIVE%\Logs exists.
'2011.03.23 - 2.1 - Fixes issue running in 32bit SCCM under 64bit Windows.
'2011.03.30 - 2.2 - Adds array of versions to keep.
'2011.04.24 - 3.0 - Added command line parameters. Still doesn't make the log directory!
'***************************************************************************************
'-----------------------------Begin Main Script--------------------------------
Option Explicit

'If help is specified on the command line, show it and quit.
If WScript.Arguments.Named.Count < 1 Or WScript.Arguments.Named.Exists("help") Or WScript.Arguments.Named.Exists("?") Then
    PrintHelp()
    WScript.Quit(0)
End If

Dim aryVersions, aryVersionsx86Onx64
Dim bolKeepJava
Dim colNamedArguments, colProcesses
Dim objWMIService, objProcessor, objProcess
Dim strArgument, strLogFilePath

'Set default command line parameters.
'The script defaults to removing all versions of Java without leaving uninstall logs.
bolKeepJava = 1
strLogFilePath = ""
aryVersions = Array()
aryVersionsx86Onx64 = Array()

'Start script logging.
WScript.Echo "**********************************"
WScript.Echo "Java uninstall script started at " & Now()

'Parse command line parameters.
If WScript.Arguments.Named.Count > 0 Then
    Set colNamedArguments = WScript.Arguments.Named

    For Each strArgument in colNamedArguments
        Select Case LCase(strArgument)
            Case "keeponly"
            Case "removeonly"
                bolKeepJava = 0
            Case "logfilepath"
                strLogFilePath = colNamedArguments.Item(strArgument)
            Case "versions"
                aryVersions = Split(colNamedArguments.Item(strArgument), ";", -1, 1)
            Case "versionsx86onx64"
                aryVersionsx86Onx64 = Split(colNamedArguments.Item(strArgument), ";", -1, 1)
            Case Else
                WScript.Echo vbCrLf & "Unknown switch: " & strArgument & "."
                WScript.Echo vbCrLf & "Java uninstall script finished at " & Now()
                WScript.Echo "**********************************" & vbCrLf
                PrintHelp()
                WScript.Quit(2)
        End Select
    Next
End If

'Output the parameters the script was run with.
WScript.Echo vbCrLf & "----------------------------------"
WScript.Echo "Script parameters:"
    If bolKeepJava Then
        WScript.Echo "Specified Java versions found will be kept. Other versions will be removed."
    Else
        WScript.Echo "Specified Java versions found will be removed. Other versions will be kept."
    End If

    'This check is important. It will default the versions array if no versions were specified. Without this the whole thing falls apart.
    If (Ubound(aryVersions) < 0 ) Then
        aryVersions = Array("FooBar")
        WScript.Echo "No native Java versions specified on the command line."
    Else
        WScript.Echo "Native Java versions specified on the command line."
    End If

    'If no non-native versions are specified set the non-native array to the native array.
    If (Ubound(aryVersionsx86Onx64) < 0) Then
        aryVersionsx86Onx64 = aryVersions
        WScript.Echo "No x86 Java versions for x64 systems specified on the command line." & vbCrLf & "Using specified native verions for x86 also."
    Else
        WScript.Echo "x86 Java versions for x64 systems specified on the command line."
    End If

    If strLogFilePath = "" Or IsNull(strLogFilePath) Then
        WScript.Echo "Uninstall logfile path is empty. Uninstall logs will not be created."
    Else
        'If the log file path does not end in a \ put one on there!
        If (StrComp(Right(strLogFilePath,1), "\") <> 0) Then
            strLogFilePath = strLogFilePath & "\"
        End If
        WScript.Echo "Uninstall log file path: " & strLogFilePath & "."
    End If
WScript.Echo "----------------------------------"

'Get a WMI Service object.
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate, (Debug)}\\.\root\cimv2")

'Get processor object. objProcessor.AddressWidth will give us bitness. Check objProcessor.AddressWidth = "32" or "64"
Set objProcessor = GetObject("winmgmts:\\.\root\cimv2:Win32_Processor='cpu0'")

'Kill processes that might prevent installs or uninstalls.
Set colProcesses = objWMIService.ExecQuery("Select Name from Win32_Process Where Name = 'jqs.exe' OR Name = 'jusched.exe' OR Name = 'jucheck.exe' OR Name = 'jp2launcher.exe' OR Name = 'java.exe' OR Name = 'javaws.exe' OR Name = 'javaw.exe'", "WQL", 48)

WScript.Echo vbCrLf & "----------------------------------"
WScript.Echo "Checking for problematic processes."

'Set this to look for errors that aren't fatal when killing processes.
On Error Resume Next

'Cycle through found problematic processes and kill them.
For Each objProcess in colProcesses

    WScript.Echo "Found process " & objProcess.Name & "."

    objProcess.Terminate()

    Select Case Err.Number
        Case 0
            WScript.Echo "Killed process " & objProcess.Name & "."
            Err.Clear
        Case -2147217406
            WScript.Echo "Process " & objProcess.Name & " already closed."
            Err.Clear
        Case Else
            WScript.Echo "Could not kill process " & objProcess.Name & "! Aborting Script!"
            WScript.Echo "Error Number: " & Err.Number
            WScript.Echo "Error Description: " & Err.Description
            WScript.Echo "Finished problematic process check."
            WScript.Echo "----------------------------------"
            WScript.Echo vbCrLf & "Java uninstall script finished at " & Now()
            WScript.Echo "**********************************" & vbCrLf
            WScript.Quit(1)
    End Select

Next

'Resume normal error handling.
On Error Goto 0

WScript.Echo "Finished problematic process check."
WScript.Echo "----------------------------------"

'This call will remove x64 versions on a x64 system and x86 versions on a x86 system.
RemoveJava "Software\Microsoft\Windows\CurrentVersion\Uninstall\", aryVersions, strLogFilePath, objProcessor

'This call will remove x86 versions on a x64 system.
If (objProcessor.AddressWidth = "64") Then
    RemoveJava "Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\", aryVersionsx86Onx64, strLogFilePath, objProcessor
End If

WScript.Echo vbCrLf & "Java uninstall script finished at " & Now()
WScript.Echo "**********************************" & vbCrLf
'-------------------------------End Main Script--------------------------------

'---------------------------------Functions------------------------------------
Function RemoveJava(strRegistryPath, aryVersions, strLogFilePath, objProcessor)

    Dim objWSHShell, objRegistry, objWbemContext, objSWbemLocator, objSWbemServices
    Dim aryUninstallKeys
    Dim strUninstallKey, strDisplayName, strUninstallString, strVersion
    Dim intUninstallReturnCode

    Set objWSHShell = CreateObject("WScript.Shell")

    'The following SWbem setup allows a script running in a x86 context, such as under the SCCM client, on a x64 system
    'to access the full x64 registry. Without this the actual registry paths will be transparently redirected to the
    'Wow6432Node branch for every registry call to HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall.
    'Essentially this transparent redirection would hide 64bit Java runtimes from a script running in 32bit mode on a 64bit OS.

    'Provides the bitness context parameters for registry calls.
    Set objWbemContext = CreateObject("WbemScripting.SWbemNamedValueSet")
    objWbemContext.Add "__ProviderArchitecture", objProcessor.AddressWidth
    objWbemContext.Add "__RequiredArchitecture", true

    'Create SWbemLocator to connect to WMI
    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")

    'Actually connect to the WMI service using the SWbemLocator and the SWbemContext parameters.
    Set objSWbemServices = objSWbemLocator.ConnectServer(".","root\default","","",,,,objWbemContext)

    'Get the Standard Registry Provider from WMI... finally.
    Set objRegistry = objSWbemServices.Get("StdRegProv")

    'Find the Java uninstallers hiding in the uninstall key. &H80000002 = HKEY_LOCAL_MACHINE for this function call.
    objRegistry.EnumKey &H80000002, strRegistryPath, aryUninstallKeys

    'Enable VBS' poor excuse for error handling...
    On Error Resume Next

    For Each strUninstallKey In aryUninstallKeys

        'These must be reset in case the GetStringValue fails to return a value. This way we don't keep values for other pieces of software.
        strDisplayName = ""
        strUninstallString = ""
        intUninstallReturnCode = ""

        'DisplayName should always be a REG_SZ
        objRegistry.GetStringValue &H80000002, strRegistryPath & strUninstallKey, "DisplayName", strDisplayName

        'Just in case GetStringValue doesn't retrieve what we want.
        If Err.Number <> 0 Then
            Wscript.Echo vbCrLf & "----------------------------------"
            WScript.Echo "Could not retrieve DisplayName at " & strRegistryPath & strUninstallKey & "!"
            WScript.Echo "Error Number: " & Err.Number
            WScript.Echo "Error Description: " & Err.Description
            Wscript.Echo "----------------------------------"
            strDisplayName = ""
            Err.Clear
        End If

        'In English: If the DisplayName contains either Java OR the DisplayName contains J2SE Runtime Environment
        'AND if the DisplayName does not contain Development AND if the DisplayName does not contain JavaDB
        'AND if the DisplayName does not contain Web Start
        'AND if the DisplayName does not contain SAS
        'AND if the DisplayName does not contain Java Auto Update then do the if block.
        'Fun, eh?
        'You could remove the Web Start line to get rid of JWS but the uninstall string If block would have to account for that. It currently doesn't.

        If ((Instr(1, strDisplayName, "Java", 1) OR (Instr(1, strDisplayName, "J2SE Runtime Environment", 1))) _
            AND ((Instr(1, strDisplayName, "Development", 1) + Instr(1, strDisplayName, "JavaDB", 1)) < 1)  _
            AND (Instr(1, strDisplayName, "Web Start", 1) < 1) _
            AND (Instr(1, strDisplayName, "SAS", 1) < 1) _
            AND (Instr(1, strDisplayName, "Java Auto Update", 1) < 1)) Then

            Wscript.Echo vbCrLf & "----------------------------------"
            WScript.Echo "Found version: " & strDisplayName
            WScript.Echo "Found at: HKEY_LOCAL_MACHINE\" & strRegistryPath & strUninstallKey

            'UninstallString might be a REG_EXPAND_SZ but GetStringValue should retrieve what we want.
            objRegistry.GetStringValue &H80000002, strRegistryPath & strUninstallKey, "UninstallString", strUninstallString

            'Just in case GetStringValue doesn't retrieve what we want.
            If Err.Number <> 0 Then
                Wscript.Echo vbCrLf & "----------------------------------"
                WScript.Echo "Could not retrieve uninstall information for " & strDisplayName & "!"
                WScript.Echo "Error Number: " & Err.Number
                WScript.Echo "Error Description: " & Err.Description
                Wscript.Echo "----------------------------------"
                strUninstallString = ""
                Err.Clear
            End If

            'Slightly convoluted logic that determines if we're keeping or removing specific versions.
            For Each strVersion In aryVersions
                If (bolKeepJava) Then
                    If (Instr(1, strDisplayName, strVersion, 1) > 0) Then
                        strUninstallString = ""
                    End If
                Else
                    If (Instr(1, strDisplayName, strVersion, 1) < 1) Then
                        strUninstallString = ""
                    End If
                End If
            Next

            If (strUninstallString <> "") Then
                'Look for very old JRE 1.1, 1.2.x, or 1.3.0 to 1.3.0_04 and 1.3.1 to 1.3.1_04 InstallShield installs.
                If (Instr(1, strUninstallKey, "JRE 1", 1)) Then
                    strUninstallString = Replace(strUninstallString, "-f", "-a -x -y -f")
                'Look for 1.3.0_05 and 1.3.1_05 to 1.3.1_20 InstallShield based installs.
                ElseIf (Instr(1, strUninstallString, "-uninst", 1)) Then
                    strUninstallString = ""
                    WScript.Echo "Java versions 1.3.0_05 and 1.3.1_05 through 1.3.1_20 cannot be silently uninstalled."
                'Look for a 1.4.0 to 1.4.1_07 InstallShield installation.
                ElseIf (Instr(1, strUninstallString, "Anytext", 1)) Then
                    'Create ISS script for this install and fix the uninstall string.
                    If (CreateISSFile(strUninstallKey, objWSHShell.ExpandEnvironmentStrings("%TEMP%"))) Then
                        strUninstallString = Replace(strUninstallString, "Anytext", "/s /SMS /w /f1""" & objWSHShell.ExpandEnvironmentStrings("%TEMP%") _
                            & "\" & strUninstallKey & ".iss""")
                        'Check and add the logfile to the uninstaller string.
                        If (strLogFilePath <> "") Then
                            strUninstallString = strUninstallString & " /f2""" & strLogFilePath & strDisplayName & "_Uninstall.txt"""
                        End If
                    Else
                        strUninstallString = ""
                    End If
                'Look for 1.4.2 and up MSI based InstallShield installs.
                ElseIf (Instr(1, strUninstallString, "msiexec.exe", 1)) Then
                    'Create MSIEXEC uninstall string.
                    strUninstallString = "MSIEXEC.EXE /X " & strUninstallKey & " /qn /norestart"
                    'Check and add the logfile to the uninstaller string.
                    If (strLogFilePath <> "") Then
                        strUninstallString = strUninstallString & " /l*v """ & strLogFilePath & strDisplayName & "_Uninstall.txt"""
                    End If
                Else
                    strUninstallString = ""
                End If
            Else
                strUninstallString = ""
            End If

            WScript.Echo "Uninstall string: " & strUninstallString

            If (strUninstallString = "") Then
                WScript.Echo strDisplayName & " was not uninstalled."
            Else
                'Run the uninstaller.
                intUninstallReturnCode = objWSHShell.Run(strUninstallString, 0, true)
                WScript.Echo "Uninstall return code was: " & intUninstallReturnCode & "."
            End If

            WScript.Echo "----------------------------------"

        End If

    Next

    'Resume normal quit on error behavior.
    On Error GoTo 0

End Function

Function CreateISSFile(strUninstallKey, strTempPath)
    On Error Resume Next

    Dim objFileSystem, objUninstallScript

    Set objFileSystem  = CreateObject("Scripting.FileSystemObject")

    'Create InstallShield ISS script file for the uninstallation.
    Set objUninstallScript = objFileSystem.OpenTextFile(strTempPath & "\" & strUninstallKey & ".iss", 2, True)

    If (Err.Number <> 0) Then
        WScript.Echo "Could not create uninstall file at " & strTempPath & "\" & strUninstallKey & ".iss!"
        WScript.Echo "Error Number: " & Err.Number
        WScript.Echo "Error Description: " & Err.Description
        Err.Clear
        CreateISSFile = 0
    End If

    'One ugly write statement to cut down on the ammount of error checking that has to be done.
    'That SharedFile=YesToAll creates problems with multiple versions of 1.4.0 to 1.4.1_07 installed.
    objUninstallScript.Write "[InstallShield Silent]" & vbCrLf & "Version=v6.00.000" & vbCrLf & "File=Response File" & vbCrLf & "[File Transfer]" & _
        vbCrLf & "OverwrittenReadOnly=NoToAll" & vbCrLf & "[" & strUninstallKey & "-DlgOrder]" & vbCrLf & "Dlg0=" & strUninstallKey & "-SprintfBox-0" & _
        vbCrLf & "Count=2" & vbCrLf & "Dlg1=" & strUninstallKey & "-File Transfer" & vbCrLf & "[" & strUninstallKey & "-SprintfBox-0]" & vbCrLf & "Result=1" & _
        vbCrLf & "[Application]" & vbCrLf & "Name=Java 2 Runtime Environment, SE v1.4.0" & vbCrLf & "Version=1.4.0" & vbCrLf & "Company=JavaSoft" & _
        vbCrLf & "Lang=0009" &    vbCrLf & "[" & strUninstallKey & "-File Transfer]" & vbCrLf & "SharedFile=NoToAll"

    If (Err.Number <> 0) Then
        WScript.Echo "Could not create uninstall file at " & strTempPath & "\" & strUninstallKey & ".iss!"
        WScript.Echo "Error Number: " & Err.Number
        WScript.Echo "Error Description: " & Err.Description   
        Err.Clear
        CreateISSFile = 0
    End If

    objUninstallScript.Close

    If (Err.Number <> 0) Then
        WScript.Echo "Could not create uninstall file at " & strTempPath & "\" & strUninstallKey & ".iss!"
        WScript.Echo "Error Number: " & Err.Number
        WScript.Echo "Error Description: " & Err.Description
        Err.Clear
        CreateISSFile = 0
    End If


    CreateISSFile = 1

End Function

Function PrintHelp()
    'Just prints out the help when run with /help /? or no arguments.
    WScript.Echo vbCrLf & "Java Runtime Environment Removal Script v3.0" & vbCrLf
    WScript.Echo "Removes Java runtimes based on command line parameters." & vbCrLf & "Default parameters removes all Java versions without creating logs."
    WScript.Echo "Does not uninstall Java versions 1.3.0_05 and 1.3.1_05 through 1.3.1_20." & vbCrLf & "They do not uninstall silently." & vbCrLf
    WScript.Echo "Command line switches:" & vbCrLf
    WScript.Echo "/keeponly" & vbTab & vbTab & "Script keeps only versions specified." & vbCrLf & vbTab & vbTab & vbTab & "If no versions are specified no versions are kept." & vbCrLf
    WScript.Echo "/removeonly" & vbTab & vbTab & "Script removes only versions specified." & vbCrLf & vbTab & vbTab & vbTab & "If no versions are specified no versions are removed." & vbCrLf
    WScript.Echo "/versions:" & vbTab & vbTab & "Specifies verions to act on." & vbCrLf & vbTab & vbTab & vbTab & "Versions are seperated by semicolons." & vbCrLf & vbTab & vbTab & vbTab & _
                "By default specified versions are kept." & vbCrLf & vbTab & vbTab & vbTab & "MUST MATCH THE DISPLAY NAME IN ADD/REMOVE PROGRAMS" & vbCrLf
    WScript.Echo "/versionsx86onx64:" & vbTab & "Specifies x86 runtime versions to keep on a x64 system." & vbCrLf & vbTab & vbTab & vbTab & _
                "Versions are seperated by semicolon." & vbCrLf & vbTab & vbTab & vbTab & _
                "If no x86 versions are specified script uses versions"  & vbCrLf & vbTab & vbTab & vbTab & "specified by /versions for both x64 and x86 runtimes." _
                  & vbCrLf & vbTab & vbTab & vbTab & "MUST MATCH THE DISPLAY NAME IN ADD/REMOVE PROGRAMS" & vbCrLf
    Wscript.Echo "/logfilepath:" & vbTab & vbTab & "Sets path for uninstall log file from Java runtimes." & vbCrLf & vbTab & vbTab & vbTab & _
                "If path does not exist uninstallers will fail." & vbCrLf
    WScript.Echo "Examples:" & vbCrLf
    WScript.Echo "cscript /nologo JavaUninstallScript.vbs /keeponly /versions:""Java(TM) 6 Update 24;J2SE Runtime Environment 5.0 Update 16"" /logfilepath:""C:\Temp"""
    WScript.Echo "Removes all Java Runtimes found except Java 6 Update 24 and J2SE 5 Update 16 and places the uninstall logs in C:\Temp." & vbCrLf
    WScript.Echo "cscript /nologo JavaUninstallScript.vbs /keeponly /versions:""Java(TM) 6 Update 24"" /versionsx86onx64:""J2SE Runtime Environment 5.0 Update 16"" /logfilepath:""C:\Temp"""
    WScript.Echo "Removes all Java Runtimes found except x64 Java 6 Update 24 and x86 J2SE 5 Update 16 on a x64 system and places the uninstall logs in C:\Temp." & vbCrLf
    WScript.Echo "cscript /nologo JavaUninstallScript.vbs /keeponly"
    WScript.Echo "Removes all Java Runtimes without creating logs." & vbCrLf
    WScript.Echo "cscript /nologo JavaUninstallScript.vbs /removeonly"
    WScript.Echo "Keeps all Java Runtimes. Only useful for making a list of installed runtimes." & vbCrLf
End Function

Answered 04/24/2011 by: LabDeploy
Senior Yellow Belt

Please log in to comment
-1

Great script ! Guys, Can someone modify the script to uninstall only few specific versions while not disturbing other versions of Java on a server ? We do this regularly on servers but now server count has also increased. So retrieving server names from a list within the script might also help here.

Answered 04/09/2011 by: sunilcse04
Yellow Belt

Please log in to comment
-1

Great job, LabDeploy!! After a lot of trial/error and tweaking, I managed to run your latest script from our Kace. Thank you!!!

Answered 04/05/2011 by: JonHall
Orange Belt

Please log in to comment
0

Server_guy, here's a version that uses an array of current version strings to keep desired Java runtimes installed. The comments explain the changes.


'***************************************************************************************
'Java removal script.
'Version: 2.2
'Description: Removes x86 and x64 Java runtimes, except for the specified version.
'2011.03.09 - 2.0 - First version. Assumes %SYSTEMDRIVE%\Logs exists.
'2011.03.23 - 2.1 - Fixes issue running in 32bit SCCM under 64bit Windows.
'2011.03.30 - 2.2 - Adds array of versions to keep.
'***************************************************************************************
'-----------------------------Begin Main Script--------------------------------
OPTION EXPLICIT

WScript.Echo "**********************************"
WScript.Echo "Java uninstall script started at " & Now()

Dim objWMIService, objProcessor, objProcess
Dim colProcesses
Dim aryKeepVersions

'Create array of Java versions to leave installed.
'Each entry MUST match the DisplayName in the uninstall registry key for desired version.
'Since Java updates are syncronized for the most part this array works for x86 and x64.
'If you want different x86 and x64 versions, setting the array here sets it for x64 versions.
'Changing the array after the first RemoveJava call will reset it for x86 versions on a x64 system.
'Set this array to something nonsensical, like "FooBar", to remove ALL Java versions.
aryKeepVersions = array("Java(TM) 6 Update 24","J2SE Runtime Environment 5.0 Update 16")

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate, (Debug)}\\.\root\cimv2")

'Get processor object. objProcessor.AddressWidth will give us bitness. Check objProcessor.AddressWidth = "32" or "64"
Set objProcessor = GetObject("winmgmts:\\.\root\cimv2:Win32_Processor='cpu0'")

'Kill processes that might prevent installs or uninstalls.
Set colProcesses = objWMIService.ExecQuery("Select Name from Win32_Process Where Name = 'jqs.exe' OR Name = 'jusched.exe' OR Name = 'jucheck.exe' OR Name = 'jp2launcher.exe' OR Name = 'java.exe' OR Name = 'javaws.exe' OR Name = 'javaw.exe'", "WQL", 48)

WScript.Echo vbCrLf & "----------------------------------"
WScript.Echo "Checking for problematic processes."

'Set this to look for errors that aren't fatal when killing processes.
On Error Resume Next

For Each objProcess in colProcesses

WScript.Echo "Found process " & objProcess.Name & "."

objProcess.Terminate()

Select Case Err.Number
Case 0
WScript.Echo "Killed process " & objProcess.Name & "."
Err.Clear
Case -2147217406
WScript.Echo "Process " & objProcess.Name & " already closed."
Err.Clear
Case Else
WScript.Echo "Could not kill process " & objProcess.Name & "! Aborting Script!"
WScript.Echo "Error Number: " & Err.Number
WScript.Echo "Error Description: " & Err.Description
WScript.Quit(1)
End Select

Next

'Resume normal error handling.
On Error Goto 0

WScript.Echo "Finished problematic process check."
WScript.Echo "----------------------------------"

'This call will remove x64 versions on a x64 system and x86 versions on a x86 system.
RemoveJava "Software\Microsoft\Windows\CurrentVersion\Uninstall\", aryKeepVersions, objProcessor

'Reset the aryKeepVersions array here to set different x86 Java versions to keep on a x64 system.
'aryKeepVersions = array("Version1", "Version2")

'This call will remove x86 versions on a x64 system.
If (objProcessor.AddressWidth = "64") Then
RemoveJava "Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\", aryKeepVersions, objProcessor
End If

WScript.Echo vbCrLf & "Java uninstall script finished at " & Now()
WScript.Echo "**********************************"
'-------------------------------End Main Script--------------------------------

'---------------------------------Functions------------------------------------
Function RemoveJava(strRegistryPath, aryKeepVersions, objProcessor)

Dim objWSHShell, objRegistry, objWbemContext, objSWbemLocator, objSWbemServices
Dim aryUninstallKeys
Dim strUninstallKey, strDisplayName, strUninstallString, strPathToLog, strCurrentVersion
Dim intUninstallReturnCode

Set objWSHShell = CreateObject("WScript.Shell")

'Set the logfile path here. This path should already exist. String needs trailing slash.
strPathToLog = objWSHShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%") & "\logs\"

'The following SWbem setup allows a script running in a x86 context, such as under the SCCM client, on a x64 system
'to access the full x64 registry. Without this the actual registry paths will be transparently redirected to the
'Wow6432Node branch for every registry call to HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall.
'Essentially this transparent redirection would hide 64bit Java runtimes from a script running in 32bit mode on a 64bit OS.

'Provides the bitness context parameters for registry calls.
Set objWbemContext = CreateObject("WbemScripting.SWbemNamedValueSet")
objWbemContext.Add "__ProviderArchitecture", objProcessor.AddressWidth
objWbemContext.Add "__RequiredArchitecture", true

'Create SWbemLocator to connect to WMI
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")

'Actually connect to the WMI service using the SWbemLocator and the SWbemContext parameters.
Set objSWbemServices = objSWbemLocator.ConnectServer(".","root\default","","",,,,objWbemContext)

'Get the Standard Registry Provider from WMI... finally.
Set objRegistry = objSWbemServices.Get("StdRegProv")

'Find the Java uninstallers hiding in the uninstall key. &H80000002 = HKEY_LOCAL_MACHINE for this function call.
objRegistry.EnumKey &H80000002, strRegistryPath, aryUninstallKeys

'Enable VBS' poor excuse for error handling...
On Error Resume Next

For Each strUninstallKey In aryUninstallKeys
'These must be reset in case the GetStringValue fails to return a value. This way we don't keep values for other pieces of software.
strDisplayName = ""
strUninstallString = ""

'DisplayName should always be a REG_SZ
objRegistry.GetStringValue &H80000002, strRegistryPath & strUninstallKey, "DisplayName", strDisplayName

'Just in case GetStringValue doesn't retrieve what we want.
If Err.Number <> 0 Then
WScript.Echo "Could not retrieve DisplayName at " & strRegistryPath & strUninstallKey & "!"
WScript.Echo "Error Number: " & Err.Number
WScript.Echo "Error Description: " & Err.Description
strDisplayName = ""
Err.Clear
End If

'In English: If the DisplayName contains either Java OR the DisplayName contains J2SE Runtime Environment
'AND if the DisplayName does not contain Development AND if the DisplayName does not contain JavaDB
'AND if the DisplayName does not contain Web Start
'AND if the DisplayName does not contain SAS then do the if block.
'Fun, eh?
'You could remove the Web Start line to get rid of JWS but the uninstall string If block would have to account for that. It currently doesn't.

If ((Instr(1, strDisplayName, "Java", 1) OR (Instr(1, strDisplayName, "J2SE Runtime Environment", 1))) _
AND ((Instr(1, strDisplayName, "Development", 1) + Instr(1, strDisplayName, "JavaDB", 1)) < 1)  _
AND (Instr(1, strDisplayName, "Web Start", 1) < 1) _
AND (Instr(1, strDisplayName, "SAS", 1) < 1)) Then

Wscript.Echo vbCrLf & "----------------------------------"
WScript.Echo "Found version: " & strDisplayName
WScript.Echo "Found at: HKEY_LOCAL_MACHINE\" & strRegistryPath & strUninstallKey

'UninstallString might be a REG_EXPAND_SZ but GetStringValue should retrieve what we want.
objRegistry.GetStringValue &H80000002, strRegistryPath & strUninstallKey, "UninstallString", strUninstallString

'Just in case GetStringValue doesn't retrieve what we want.
If Err.Number <> 0 Then
WScript.Echo "Could not retrieve uninstall information for " & strDisplayName & "!"
WScript.Echo "Error Number: " & Err.Number
WScript.Echo "Error Description: " & Err.Description
strUninstallString = ""
Err.Clear
End If

'Loop through array of versions to keep and null out strUninstallString if found.
'This will cause the next If block to ignore desired versions.
For Each strCurrentVersion In aryKeepVersions
If (Instr(1, strDisplayName, strCurrentVersion, 1) > 0) Then
strUninstallString = ""
End If
Next

If (strUninstallString <> "") Then
'Look for very old JRE 1.1, 1.2.x, or 1.3.0 to 1.3.0_04 and 1.3.1 to 1.3.1_04 InstallShield installs.
If (Instr(1, strUninstallKey, "JRE 1", 1)) Then
strUninstallString = Replace(strUninstallString, "-f", "-a -x -y -f")
'Look for 1.3.0_05 and 1.3.1_05 to 1.3.1_20 InstallShield based installs.
ElseIf (Instr(1, strUninstallString, "-uninst", 1)) Then
strUninstallString = ""
'Look for a 1.4.0 to 1.4.1_07 InstallShield installation.
ElseIf (Instr(1, strUninstallString, "Anytext", 1)) Then
'Create ISS script for this install and fix the uninstall string.
If (CreateISSFile(strUninstallKey, objWSHShell.ExpandEnvironmentStrings("%TEMP%"))) Then
strUninstallString = Replace(strUninstallString, "Anytext", "/s /SMS /w /f1""" & objWSHShell.ExpandEnvironmentStrings("%TEMP%") & "\" _
& strUninstallKey & ".iss"" /f2""" & strPathToLog & strDisplayName & "_Uninstall.txt""")
Else
strUninstallString = ""
End If
'Look for 1.4.2 and up MSI based InstallShield installs.
ElseIf (Instr(1, strUninstallString, "msiexec.exe", 1)) Then
'Create MSIEXEC uninstall string.
strUninstallString = "MSIEXEC.EXE /X " & strUninstallKey & " /qn /norestart /l*v """ & strPathToLog & strDisplayName & "_Uninstall.txt"""
Else
strUninstallString = ""
End If
Else
strUninstallString = ""
End If

WScript.Echo "Uninstall string: " & strUninstallString

If (strUninstallString = "") Then
WScript.Echo strDisplayName & " could not be uninstalled."
Else
'Run the uninstaller.
intUninstallReturnCode = objWSHShell.Run(strUninstallString, 0, true)
WScript.Echo "Uninstall return code was: " & intUninstallReturnCode & "."
End If

WScript.Echo "----------------------------------"

End If

Next

'Resume normal quit on error behavior.
On Error GoTo 0

End Function

Function CreateISSFile(strUninstallKey, strTempPath)
On Error Resume Next

Dim objFileSystem, objUninstallScript

Set objFileSystem  = CreateObject("Scripting.FileSystemObject")

'Create InstallShield ISS script file for the uninstallation.
Set objUninstallScript = objFileSystem.OpenTextFile(strTempPath & "\" & strUninstallKey & ".iss", 2, True)

If (Err.Number <> 0) Then
WScript.Echo "Could not create uninstall file at " & strTempPath & "\" & strUninstallKey & ".iss!"
WScript.Echo "Error Number: " & Err.Number
WScript.Echo "Error Description: " & Err.Description
Err.Clear
CreateISSFile = 0
End If

'One ugly write statement to cut down on the ammount of error checking that has to be done.
'That SharedFile=YesToAll creates problems with multiple versions of 1.4.0 to 1.4.1_07 installed.
objUninstallScript.Write "[InstallShield Silent]" & vbCrLf & "Version=v6.00.000" & vbCrLf & "File=Response File" & vbCrLf & "[File Transfer]" & _
vbCrLf & "OverwrittenReadOnly=NoToAll" & vbCrLf & "[" & strUninstallKey & "-DlgOrder]" & vbCrLf & "Dlg0=" & strUninstallKey & "-SprintfBox-0" & _
vbCrLf & "Count=2" & vbCrLf & "Dlg1=" & strUninstallKey & "-File Transfer" & vbCrLf & "[" & strUninstallKey & "-SprintfBox-0]" & vbCrLf & "Result=1" & _
vbCrLf & "[Application]" & vbCrLf & "Name=Java 2 Runtime Environment, SE v1.4.0" & vbCrLf & "Version=1.4.0" & vbCrLf & "Company=JavaSoft" & _
vbCrLf & "Lang=0009" & vbCrLf & "[" & strUninstallKey & "-File Transfer]" & vbCrLf & "SharedFile=NoToAll"

If (Err.Number <> 0) Then
WScript.Echo "Could not create uninstall file at " & strTempPath & "\" & strUninstallKey & ".iss!"
WScript.Echo "Error Number: " & Err.Number
WScript.Echo "Error Description: " & Err.Description
Err.Clear
CreateISSFile = 0
End If

objUninstallScript.Close

If (Err.Number <> 0) Then
WScript.Echo "Could not create uninstall file at " & strTempPath & "\" & strUninstallKey & ".iss!"
WScript.Echo "Error Number: " & Err.Number
WScript.Echo "Error Description: " & Err.Description
Err.Clear
CreateISSFile = 0
End If


CreateISSFile = 1

End Function

Answered 03/30/2011 by: LabDeploy
Senior Yellow Belt

Please log in to comment
0

Is it possible to set the script so that it will keep more than 1 version of Java?

strCurrentVersion = "Java(TM) 6 Update 24"

Thanks

Answered 03/29/2011 by: server_guy
Senior Yellow Belt

Please log in to comment
0

Found a fantastic gotcha with SCCM on 64bit machines while testing this script. Our main deployment scenario is to 32bit machines. This script was tested on 32bit and 64bit machines as an admin user and on 32bit machines under SCCM. Worked great for our purposes. Turns out it didn't work great under SCCM on 64bit machines.

The SCCM client was running the script in a 32bit environment on a 64bit OS so all script calls to the registry were being reflected to the Wow6432Node branch. Essentially the script couldn't see the 64bit uninstall keys in the registry and was running through the 32bit uninstall keys twice. I've updated the script with a new method of calling the registry so it should always see the complete registry even when running in a 32bit environment under 64bit Windows. It's been working well in our testing so far.

I also added a bit more error output if an error does get caught and changed the InstallShield uninstall template file to NOT remove shared files. This fixes the bug with Java versions 1.4.x removing a shared file all the 1.4.x uninstallers rely on. It leaves a few DLLs on the system but the security increase of removing all old Java versions outweighs that in our environment.

Adding a bit of code to RemoveJava() to check for/create the desired  logfile directory would make this pretty much a standalone removal  script.

Please modify as needed. If you find a bug or add a useful modification please post it back!


'***************************************************************************************
'Java removal script.
'Version: 2.1
'Description: Removes x86 and x64 Java runtimes, except for the specified version.
'***************************************************************************************
'-----------------------------Begin Main Script--------------------------------
OPTION EXPLICIT

WScript.Echo "**********************************"
WScript.Echo "Java uninstall script started at " & Now()

Dim objWMIService, objProcessor, objProcess
Dim colProcesses
Dim strCurrentVersion

'Set Current Version so script will not remove it. This MUST match the DisplayName in the uninstall registry key for desired version.
'Since Java updates are syncronized for the most part this variable works for x86 and x64.
'If you want different x86 and x64 versions, setting the variable here sets it for the x64 version.
'Changing the variable after the first RemoveJava call will reset it for the x86 version.
'Set this to something nonsensical, like "FooBar", to remove ALL Java versions.
strCurrentVersion = "Java(TM) 6 Update 24"

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate, (Debug)}\\.\root\cimv2")

'Get processor object. objProcessor.AddressWidth will give us bitness. Check objProcessor.AddressWidth = "32" or "64"
Set objProcessor = GetObject("winmgmts:\\.\root\cimv2:Win32_Processor='cpu0'")

'Kill processes that might prevent installs or uninstalls.
Set colProcesses = objWMIService.ExecQuery("Select Name from Win32_Process Where Name = 'jqs.exe' OR Name = 'jusched.exe' OR Name = 'jucheck.exe' OR Name = 'jp2launcher.exe' OR Name = 'java.exe' OR Name = 'javaws.exe' OR Name = 'javaw.exe'", "WQL", 48)

WScript.Echo vbCrLf & "----------------------------------"
WScript.Echo "Checking for problematic processes."

'Set this to look for errors that aren't fatal when killing processes.
On Error Resume Next

For Each objProcess in colProcesses

    WScript.Echo "Found process " & objProcess.Name & "."

    objProcess.Terminate()

    Select Case Err.Number
        Case 0
            WScript.Echo "Killed process " & objProcess.Name & "."
            Err.Clear
        Case -2147217406
            WScript.Echo "Process " & objProcess.Name & " already closed."
            Err.Clear
        Case Else
            WScript.Echo "Could not kill process " & objProcess.Name & "! Aborting Script!"
            WScript.Echo "Error Number: " & Err.Number
            WScript.Echo "Error Description: " & Err.Description
            WScript.Quit(1)
    End Select

Next

'Resume normal error handling.
On Error Goto 0

WScript.Echo "Finished problematic process check."
WScript.Echo "----------------------------------"

RemoveJava "Software\Microsoft\Windows\CurrentVersion\Uninstall\", strCurrentVersion, objProcessor

'Reset strCurrentVersion here to set a different x86 Java version on a x64 system.
'strCurrentVersion = "x86 version"

If (objProcessor.AddressWidth = "64") Then
    RemoveJava "Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\", strCurrentVersion, objProcessor
End If

WScript.Echo vbCrLf & "Java uninstall script finished at " & Now()
WScript.Echo "**********************************"
'-------------------------------End Main Script--------------------------------

'---------------------------------Functions------------------------------------
Function RemoveJava(strRegistryPath, strCurrentVersion, objProcessor)

    Dim objWSHShell, objRegistry, objWbemContext, objSWbemLocator, objSWbemServices
    Dim aryUninstallKeys
    Dim strUninstallKey, strDisplayName, strUninstallString, strPathToLog
    Dim intUninstallReturnCode

    Set objWSHShell = CreateObject("WScript.Shell")

    'Set the logfile path here. This path should already exist. String needs trailing slash.
    strPathToLog = objWSHShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%") & "\logs\"

    'The following SWbem setup allows a script running in a x86 context, such as under the SCCM client, on a x64 system
    'to access the full x64 registry. Without this the actual registry paths will be transparently redirected to the
    'Wow6432Node branch for every registry call to HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall.
    'Essentially this transparent redirection would hide 64bit Java runtimes from a script running in 32bit mode.

    'Provides the bitness context parameters for registry calls.
    Set objWbemContext = CreateObject("WbemScripting.SWbemNamedValueSet")
    objWbemContext.Add "__ProviderArchitecture", objProcessor.AddressWidth
    objWbemContext.Add "__RequiredArchitecture", true

    'Create SWbemLocator to connect to WMI
    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")

    'Actually connect to the WMI service using the SWbemLocator and the SWbemContext parameters.
    Set objSWbemServices = objSWbemLocator.ConnectServer(".","root\default","","",,,,objWbemContext)

    'Get the Standard Registry Provider from WMI... finally.
    Set objRegistry = objSWbemServices.Get("StdRegProv")

    'Find the Java uninstallers hiding in the uninstall key. &H80000002 = HKEY_LOCAL_MACHINE for this function call.
    objRegistry.EnumKey &H80000002, strRegistryPath, aryUninstallKeys

    'Enable VBS' poor excuse for error handling...
    On Error Resume Next

    For Each strUninstallKey In aryUninstallKeys
        'These must be reset in case the RegRead fails to return a value. This way we don't keep values for other pieces of software.
        strDisplayName = ""
        strUninstallString = ""

        'DisplayName should always be a REG_SZ
        objRegistry.GetStringValue &H80000002, strRegistryPath & strUninstallKey, "DisplayName", strDisplayName

        'Just in case GetStringValue doesn't retrieve what we want.
        If Err.Number <> 0 Then
            WScript.Echo "Could not retrieve DisplayName at " & strRegistryPath & strUninstallKey & "!"
            WScript.Echo "Error Number: " & Err.Number
            WScript.Echo "Error Description: " & Err.Description
            strDisplayName = ""
            Err.Clear
        End If

        'In English: If the DisplayName contains either Java OR the DisplayName contains J2SE Runtime Environment
        'AND if the DisplayName does not contain Development AND if the DisplayName does not contain JavaDB
        'AND if the DisplayName does not contain Web Start
        'AND if the DisplayName does not contain the current version then do the if block.
        'Fun, eh?
        'You could remove the Web Start line to get rid of JWS but the uninstall string If block would have to account for that. It currently doesn't.

        If ((Instr(1, strDisplayName, "Java", 1) OR (Instr(1, strDisplayName, "J2SE Runtime Environment", 1))) _
            AND ((Instr(1, strDisplayName, "Development", 1) + Instr(1, strDisplayName, "JavaDB", 1)) < 1)  _
            AND (Instr(1, strDisplayName, "Web Start", 1) < 1) _
            AND (Instr(1, strDisplayName, strCurrentVersion, 1) < 1)) Then

            Wscript.Echo vbCrLf & "----------------------------------"
            WScript.Echo "Found version: " & strDisplayName
            WScript.Echo "Found at: HKEY_LOCAL_MACHINE\" & strRegistryPath & strUninstallKey

            'UninstallString might be a REG_EXPAND_SZ but GetStringValue should retrieve what we want.
            objRegistry.GetStringValue &H80000002, strRegistryPath & strUninstallKey, "UninstallString", strUninstallString

            'Just in case GetStringValue doesn't retrieve what we want.
            If Err.Number <> 0 Then
                WScript.Echo "Could not retrieve uninstall information for " & strDisplayName & "!"
                WScript.Echo "Error Number: " & Err.Number
                WScript.Echo "Error Description: " & Err.Description
                strUninstallString = ""
                Err.Clear
            End If

            If (strUninstallString <> "") Then
                'Look for very old JRE 1.1, 1.2.x, or 1.3.0 to 1.3.0_04 and 1.3.1 to 1.3.1_04 InstallShield installs.
                If (Instr(1, strUninstallKey, "JRE 1", 1)) Then
                    strUninstallString = Replace(strUninstallString, "-f", "-a -x -y -f")
                'Look for 1.3.0_05 and 1.3.1_05 to 1.3.1_20 InstallShield based installs.
                ElseIf (Instr(1, strUninstallString, "-uninst", 1)) Then
                    strUninstallString = ""
                'Look for a 1.4.0 to 1.4.1_07 InstallShield installation.
                ElseIf (Instr(1, strUninstallString, "Anytext", 1)) Then
                    'Create ISS script for this install and fix the uninstall string.
                    If (CreateISSFile(strUninstallKey, objWSHShell.ExpandEnvironmentStrings("%TEMP%"))) Then
                        strUninstallString = Replace(strUninstallString, "Anytext", "/s /SMS /w /f1""" & objWSHShell.ExpandEnvironmentStrings("%TEMP%") & "\" _
                        & strUninstallKey & ".iss"" /f2""" & strPathToLog & strDisplayName & "_Uninstall.txt""")
                    Else
                        strUninstallString = ""
                    End If
                'Look for 1.4.2 and up MSI based InstallShield installs.
                ElseIf (Instr(1, strUninstallString, "msiexec.exe", 1)) Then
                    'Create MSIEXEC uninstall string.
                    strUninstallString = "MSIEXEC.EXE /X " & strUninstallKey & " /qn /norestart /l*v """ & strPathToLog & strDisplayName & "_Uninstall.txt"""
                Else
                    strUninstallString = ""
                End If
            Else
                strUninstallString = ""
            End If

            WScript.Echo "Uninstall string: " & strUninstallString

            If (strUninstallString = "") Then
                WScript.Echo strDisplayName & " could not be uninstalled."
            Else
                'Run the uninstaller.
                intUninstallReturnCode = objWSHShell.Run(strUninstallString, 0, true)
                WScript.Echo "Uninstall return code was: " & intUninstallReturnCode & "."
            End If

            WScript.Echo "----------------------------------"

        End If

    Next

    'Resume normal quit on error behavior.
    On Error GoTo 0

End Function

Function CreateISSFile(strUninstallKey, strTempPath)
    On Error Resume Next

    Dim objFileSystem, objUninstallScript

    Set objFileSystem  = CreateObject("Scripting.FileSystemObject")

    'Create InstallShield ISS script file for the uninstallation.
    Set objUninstallScript = objFileSystem.OpenTextFile(strTempPath & "\" & strUninstallKey & ".iss", 2, True)

    If (Err.Number <> 0) Then
        WScript.Echo "Could not create uninstall file at " & strTempPath & "\" & strUninstallKey & ".iss!"
        WScript.Echo "Error Number: " & Err.Number
        WScript.Echo "Error Description: " & Err.Description
        Err.Clear
        CreateISSFile = 0
    End If

    'One ugly write statement to cut down on the amount of error checking that has to be done.
    'That SharedFile=YesToAll creates problems with multiple versions of 1.4.0 to 1.4.1_07 installed.
    objUninstallScript.Write "[InstallShield Silent]" & vbCrLf & "Version=v6.00.000" & vbCrLf & "File=Response File" & vbCrLf & "[File Transfer]" & _
        vbCrLf & "OverwrittenReadOnly=NoToAll" & vbCrLf & "[" & strUninstallKey & "-DlgOrder]" & vbCrLf & "Dlg0=" & strUninstallKey & "-SprintfBox-0" & _
        vbCrLf & "Count=2" & vbCrLf & "Dlg1=" & strUninstallKey & "-File Transfer" & vbCrLf & "[" & strUninstallKey & "-SprintfBox-0]" & vbCrLf & "Result=1" & _
        vbCrLf & "[Application]" & vbCrLf & "Name=Java 2 Runtime Environment, SE v1.4.0" & vbCrLf & "Version=1.4.0" & vbCrLf & "Company=JavaSoft" & _
        vbCrLf & "Lang=0009" &    vbCrLf & "[" & strUninstallKey & "-File Transfer]" & vbCrLf & "SharedFile=NoToAll"

    If (Err.Number <> 0) Then
        WScript.Echo "Could not create uninstall file at " & strTempPath & "\" & strUninstallKey & ".iss!"
        WScript.Echo "Error Number: " & Err.Number
        WScript.Echo "Error Description: " & Err.Description   
        Err.Clear
        CreateISSFile = 0
    End If

    objUninstallScript.Close

    If (Err.Number <> 0) Then
        WScript.Echo "Could not create uninstall file at " & strTempPath & "\" & strUninstallKey & ".iss!"
        WScript.Echo "Error Number: " & Err.Number
        WScript.Echo "Error Description: " & Err.Description
        Err.Clear
        CreateISSFile = 0
    End If


    CreateISSFile = 1

End Function

Answered 03/24/2011 by: LabDeploy
Senior Yellow Belt

Please log in to comment
0

pndragon, couple of points about this version of  the script.

It was originally written to be included in an SCCM deployment as part of a package of scripts that would remove Java and install the newest version. I never tested it as a startup script but I think I see what happened.

It makes a few assumptions, which isn't really a good thing for a standalone startup script. It assumes that the log file directory already exists and is writable to the user account running the script. In this case the script is writing to %SYSTEMDRIVE%\Logs as set here:

    'Set the logfile path here.
    strPathToLog = objWSHShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%") & "\logs\"

in the RemoveJava function. If that directory doesn't exist you'll see the 1622 errors with MSI packages. That error means MSIEXEC couldn't write to the logfile. You could modify the script to create/check for that directory but I find it's easier to run the script from a batch file and use "MD %SYSTEMDRIVE%\logs" at the top of the batch file to create the desired logging directory. Saves a lot of tedious object creation and error checking in a VBS script. Using IF EXIST in the batch file to check for the log directory is also advisable.

The script was also not designed to be run silently. As part of a SCCM package it was intended to be run when no user was present, like overnight. Running the script in batch mode "cscript /nologo /b JavaUninstallScript.vbs" will suppress any messages from the script but I don't know if it prevent a CMD window from opening. Redirecting the output using ">>" in a batch file will also suppress errors and create a log file.

As for the beeping... there I can't help you. No idea what caused that. [&:]

Hope that helps.

Answered 03/22/2011 by: LabDeploy
Senior Yellow Belt

Please log in to comment
0

LabDeploy, I ran your script from 3/21/2011 today via a GPO as a computer startup script and upon a GPUPDATE /FORCE and restart of my test system, I noticed that the script did execute but unfortunately it didn't do so silently (which for right now, during my testing phase, this is a good thing). Is there a specific switch I need to add to the script's parameters to ensure that it runs silently?

Secondly, it did detect the only previous version of Java that was installed in my test system (6_18) but was unable to uninstall it and it resulted in an error
As the script runs, it detects the jqs.exe process and then says it successfully killed the jqs.exe process but goes on to report finding 6_18:
Uninstall string: MSIEXEC.EXE /X {26A24AE4-039D-4CA4-87B4-2F83216018F0} /qn /norestart /l*v "C:\logs\Java(TM) 6 Update 18_Uninstall.txt)
followed by
Uninstall return code: 1622
and after closing the final windows then comes a short series of fast computer beeps (about 10 or so).

I then looked at the C:\ drive and unfortunately there was no C:\logs\Java(TM) 6 Update 18_Uninstall.txt found.

Any idea what's going on? I appreciate the time you put into updating this script and whatever input you or anyone else may have on my issue.
Thank you.

Answered 03/22/2011 by: pndragon
Yellow Belt

Please log in to comment
0

First, thanks to the original creators of this script. It's pretty awesome.

Here's an updated version of the script I created for our computer labs. It's strictly an uninstall script but it will preserve a desired version. If you want to capture the script log you have to run it from a CMD file like so "cscript /nologo JavaUninstallScript.vbs >> P:\athto\logfile.txt". The script does create log files for each individual uninstall in a specified path.

Two caveats:
1. Java versions 1.3.0_05 and 1.3.1_05 to 1.3.1_20 can't be uninstalled silently. At least I couldn't find a way after a week of searching and testing. This script reflects that.
2. Java versions 1.4.0 to 1.4.1_07 have an uninstaller "bug". If you have two or more of these versions installed and uninstall one it breaks the uninstall for the others as ActPanel.dll gets removed and the other uninstallers error out on it. You have to remove the uninstall info for the other versions from the registry and reinstall them again to remove them properly. You might be able to get around this in the script by changing "SharedFile=YesToAll" to "SharedFile=NoToAll" in CreateISSFile but I haven't tested that yet. It may also leave lots of cruft on the system.


'***************************************************************************************
'Java removal script.
'Description: Removes x86 and x64 Java runtimes, except for the specified version.
'***************************************************************************************
'-----------------------------Begin Main Script--------------------------------
OPTION EXPLICIT

WScript.Echo "**********************************"
WScript.Echo "Java uninstall script started at " & Now()

Dim objWMIService, objProcessor, objProcess
Dim colProcesses
Dim strCurrentVersion

'Set Current Version so script will not remove it. This MUST match the DisplayName in the uninstall registry key for desired version.
'Since Java updates are syncronized for the most part this variable works for x86 and x64.
'If you wanted a different x64 version changing this variable between the RemoveJava calls would fix that.
'Set this to something nonsensical, like "FooBar", to remove ALL Java versions.
strCurrentVersion = "Java(TM) 6 Update 24"

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate, (Debug)}\\.\root\cimv2")

'Get processor object. objProcessor.AddressWidth will give us bitness. Check objProcessor.AddressWidth = "32" or "64"
Set objProcessor = GetObject("winmgmts:\\.\root\cimv2:Win32_Processor='cpu0'")

'Kill processes that might prevent installs or uninstalls.
Set colProcesses = objWMIService.ExecQuery("Select Name from Win32_Process Where Name = 'jqs.exe' OR Name = 'jusched.exe' OR Name = 'jucheck.exe' OR Name = 'jp2launcher.exe' OR Name = 'java.exe'", "WQL", 48)

WScript.Echo vbCrLf & "----------------------------------"
WScript.Echo "Checking for problematic processes."

'Set this to look for errors that aren't fatal when killing processes.
On Error Resume Next

For Each objProcess in colProcesses

   WScript.Echo "Found process " & objProcess.Name & "."

   objProcess.Terminate()

   Select Case Err.Number
       Case 0
           WScript.Echo "Killed process " & objProcess.Name & "."
       Case -2147217406
           WScript.Echo "Process " & objProcess.Name & " already closed."
       Case Else
           WScript.Echo "Could not kill process " & objProcess.Name & "! Aborting Script!"
           WScript.Quit(1)
   End Select
  
Next

'Resume normal error handling.
On Error Goto 0

WScript.Echo "Finished problematic process check."
WScript.Echo "----------------------------------"

RemoveJava "Software\Microsoft\Windows\CurrentVersion\Uninstall\", strCurrentVersion

'Reset strCurrentVersion here to set a different Java version for x64.
'strCurrentVersion = "x64 version"

If (objProcessor.AddressWidth = "64") Then
   RemoveJava "Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\", strCurrentVersion
End If

WScript.Echo vbCrLf & "Java uninstall script finished at " & Now()
WScript.Echo "**********************************"
'-------------------------------End Main Script--------------------------------

'---------------------------------Functions------------------------------------
Function RemoveJava(strRegistryPath, strCurrentVersion)

   Dim objWSHShell, objRegistry
   Dim aryUninstallKeys
   Dim strUninstallKey, strDisplayName, strUninstallString, strPathToLog
   Dim intUninstallReturnCode

   Set objWSHShell = CreateObject("WScript.Shell")
   Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
  
   'Set the logfile path here.
   strPathToLog = objWSHShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%") & "\logs\"
  
   'Find the Java uninstallers hiding in the uninstall key. &H80000002 = HKEY_LOCAL_MACHINE for this function call.
   objRegistry.EnumKey &H80000002, strRegistryPath, aryUninstallKeys

   'Since the RegRead will fail out if a value doesn't exist and the massive If block does our error checking we do this to save time.
   On Error Resume Next   
  
   For Each strUninstallKey In aryUninstallKeys
       'These must be reset in case the RegRead fails to return a value. This way we don't keep values for other pieces of software.
       strDisplayName = ""
       strUninstallString = ""
      
       strDisplayName = objWSHShell.RegRead("HKEY_LOCAL_MACHINE\" & strRegistryPath & strUninstallKey & "\DisplayName")
       strUninstallString = objWSHShell.RegRead("HKEY_LOCAL_MACHINE\" & strRegistryPath & strUninstallKey & "\UninstallString")
      
       'In English: If the DisplayName contains either Java OR the DisplayName contains J2SE Runtime Environment
       'AND if the DisplayName does not contain Development AND if the DisplayName does not contain JavaDB
       'AND if the DisplayName does not contain Web Start
       'AND if the DisplayName does not contain the current version
       'AND if the UnisntallString is not empty then do the if block.
       'Fun, eh?
       'You could remove the Web Start line to get rid of JWS but the uninstall string If block would have to account for that. It currently doesn't.
      
       If ((Instr(1, strDisplayName, "Java", 1) OR (Instr(1, strDisplayName, "J2SE Runtime Environment", 1))) _
           AND ((Instr(1, strDisplayName, "Development", 1) + Instr(1, strDisplayName, "JavaDB", 1)) < 1)  _
           AND (Instr(1, strDisplayName, "Web Start", 1) < 1) _
           AND (Instr(1, strDisplayName, strCurrentVersion, 1) < 1) _
           AND (strUninstallString <> "")) Then
          
           Wscript.Echo vbCrLf & "----------------------------------"
           WScript.Echo "Found version: " & strDisplayName
          
           'Look for very old JRE 1.1, 1.2.x, or 1.3.0 to 1.3.0_04 and 1.3.1 to 1.3.1_04 InstallShield installs.
           If (Instr(1, strUninstallKey, "JRE 1", 1)) Then
               strUninstallString = Replace(strUninstallString, "-f", "-a -x -y -f")
           'Look for 1.3.0_05 and 1.3.1_05 to 1.3.1_20 InstallShield based installs.
           ElseIf (Instr(1, strUninstallString, "-uninst", 1)) Then
               strUninstallString = ""
           'Look for a 1.4.0 to 1.4.1_07 InstallShield installation.
           ElseIf (Instr(1, strUninstallString, "Anytext", 1)) Then
               'Create ISS script for this install and fix the uninstall string.
               If (CreateISSFile(strUninstallKey, objWSHShell.ExpandEnvironmentStrings("%TEMP%"))) Then
                   strUninstallString = Replace(strUninstallString, "Anytext", "/s /SMS /w /f1""" & objWSHShell.ExpandEnvironmentStrings("%TEMP%") & "\" _
                   & strUninstallKey & ".iss"" /f2""" & strPathToLog & strDisplayName & "_Uninstall.txt""")
               Else
                   strUninstallString = ""
                   WScript.Echo "Could not create uninstall script for " & strDisplayName & "!"
               End If
           'Look for 1.4.2 and up MSI based InstallShield installs.
           ElseIf (Instr(1, strUninstallString, "msiexec.exe", 1)) Then
               'Create MSIEXEC uninstall string.
               strUninstallString = "MSIEXEC.EXE /X " & strUninstallKey & " /qn /norestart /l*v """ & strPathToLog & strDisplayName & "_Uninstall.txt"""
           Else
               strUninstallString = ""
           End If
          
           WScript.Echo "Uninstall string: " & strUninstallString
          
           If (strUninstallString = "") Then
               WScript.Echo strDisplayName & " could not be uninstalled."
           Else
               'Run the uninstaller.
               intUninstallReturnCode = objWSHShell.Run(strUninstallString, 0, true)
              
               WScript.Echo "Uninstall return code was: " & intUninstallReturnCode & "."
           End If
          
           WScript.Echo "----------------------------------"
          
       End If
  
   Next
  
   'Resume normal quit on error behavior.
   On Error GoTo 0
  
End Function

Function CreateISSFile(strUninstallKey, strTempPath)
   On Error Resume Next
  
   Dim objFileSystem, objUninstallScript
  
   Set objFileSystem  = CreateObject("Scripting.FileSystemObject")
  
   'Create InstallShield ISS script file for the uninstallation.
   Set objUninstallScript = objFileSystem.OpenTextFile(strTempPath & "\" & strUninstallKey & ".iss", 2, True)
  
   If (Err.Number <> 0) Then
       CreateISSFile = 0
   End If
  
   'One ugly write statement to cut down on the ammount of error checking that has to be done.
   'That SharedFile=YesToAll creates problems with versions 1.4.0 to 1.4.1_07
   objUninstallScript.Write "[InstallShield Silent]" & vbCrLf & "Version=v6.00.000" & vbCrLf & "File=Response File" & vbCrLf & "[File Transfer]" & _
       vbCrLf & "OverwrittenReadOnly=NoToAll" & vbCrLf & "[" & strUninstallKey & "-DlgOrder]" & vbCrLf & "Dlg0=" & strUninstallKey & "-SprintfBox-0" & _
       vbCrLf & "Count=2" & vbCrLf & "Dlg1=" & strUninstallKey & "-File Transfer" & vbCrLf & "[" & strUninstallKey & "-SprintfBox-0]" & vbCrLf & "Result=1" & _
       vbCrLf & "[Application]" & vbCrLf & "Name=Java 2 Runtime Environment, SE v1.4.0" & vbCrLf & "Version=1.4.0" & vbCrLf & "Company=JavaSoft" & _
       vbCrLf & "Lang=0009" &     vbCrLf & "[" & strUninstallKey & "-File Transfer]" & vbCrLf & "SharedFile=YesToAll"
      
   If (Err.Number <> 0) Then
       CreateISSFile = 0
   End If
      
   objUninstallScript.Close
  
   If (Err.Number <> 0) Then
       CreateISSFile = 0
   End If
  
      
   CreateISSFile = 1
  
End Function   

Answered 03/21/2011 by: LabDeploy
Senior Yellow Belt

Please log in to comment
0
ORIGINAL:  xyzzy.deploy

The script works great for all older versions, however  I can't get it to un-install "Java(TM) 6 Update 22"  or  "Java(TM) 6 Update 22" .  Looking at the old in c:\logs it never sees either 22 or 23 but is leaving  24 fine. 

Any ideas would be a great help.    Thanks in advance.


Answered 03/02/2011 by: meofcourse
Yellow Belt

Please log in to comment
1

Thought I'd post my modification to allow for 32 bit versions of Java installed on 64 bit Vista/7/2008 machines.  Basically it uses a second temp file for uninstall routines found in the WOW6432Node section of the registry and changes the formula for CLSID for these as well (an 85 character offset rather than 73).  I am sure that this modification could be prettier in the code, but this is the easiest.

Btw.  Thanks for the previous posts.  They have helped tremendously.

'
# 32bit version on x64bit box modification by Meofcourse 03/02/2011
# Modified by D.Collins - 16:58 18/02/2009
'# Uninstalls any and all versions of Java Runtime.
'# Based on a script by 'muaddip' from Appdeploy.com message boards.
'# http://itninja.com/question/stopping-a-service09


Option Explicit

Dim wshShell, fso, strLogFile, ts, strTempDir, strTempISS, strUnString, tsIn, blFound
Dim strUninstLine, CLSID, search5, search6, search7, strJRE1, strDisplayName, strDisplayVersion
Dim strPublisher, strUninstallString, strJREUninstallString, strJREDisplayName
Dim search1, search2, search3, search4, strJREUninstallStringNEW, ret, strUninstCMD
Dim tsISS, strSetupexe, qVal, strComputername

qVal = 0

Set wshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

strComputername = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

If Not fso.FolderExists("C:\Logs") Then fso.CreateFolder("C:\Logs")
strLogFile = "C:\Logs\Java_Uninstall_" & strComputername & ".log"
Set ts = fso.OpenTextFile(strLogFile, 8, True)

ts.WriteLine String(80, "_")
ts.WriteLine String(80, "¯")
ts.WriteLine Now() & " - Java Runtime(s) uninstallation"
ts.WriteLine String(80, "_") & vbCrlf

'# Generate Registry extracts from 'Uninstall' keys.
PreFlight()

'# Kill Java Processes
KillProc()

strTempDir = wshShell.ExpandEnvironmentStrings("%temp%")
strTempISS = strTempDir & "\iss"
strUnString = " -s -a /s /f1"
Set tsIn = fso.OpenTextFile(strTempDir & "\uninstall.tmp", 1)

If Not fso.FolderExists(strTempISS) Then fso.CreateFolder(strTempISS)

blFound = False

Do While Not tsIn.AtEndOfStream
    strUninstLine = tsIn.ReadLine
    CLSID = Mid(strUninstLine, 73, 38)
    search5 = Instr(strUninstLine, "JRE 1")
    search6 = Instr(strUninstLine, "]")
    If search5 > 0 AND search6 > 0 Then
        strJRE1 = Replace(Mid(strUninstLine, search5, search6),"]","") 
    End If

    On Error Resume Next

    strDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayName")
    strDisplayVersion = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayVersion")
    strPublisher = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\Publisher")
    strUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\UninstallString")

    strJREUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\UninstallString")
    strJREDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\DisplayName")

    On Error Goto 0

    'Search for presence of Java and Sun in DisplayName and Publisher
    search1 = Instr(1, strDisplayName, "Java", 1)
    search2 = Instr(1, strPublisher, "Sun", 1)
    search3 = Instr(1, strDisplayName, "J2SE", 1)
    search4 = Instr(1, strUninstallString, "setup.exe", 1)
    search7 = InStr(1, strDisplayName, "Development", 1) + InStr(1, strDisplayName, "Java DB", 1)

    If strJREUninstallString <> "" Then
        blFound = True
        '# JRE 1 found
        strJREUninstallStringNEW = Replace(strJREUninstallString," -f"," -s -a /s /f")
        ts.WriteLine Now() & " - " & strJREDisplayName
        ts.WriteLine Now() & " - Uninstall String sent: " & strJREUninstallStringNEW
        ret = wshShell.Run(strJREUninstallStringNEW , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1

    ElseIf search7 = 0 And search1 > 0 Or search3 > 0 And search2 > 0 Then
        blFound = True
        strUninstCMD = "msiexec.exe /x " & CLSID & " /norestart /qn"

        If search4 > 0 Then
            '# Old InstallShield setup found
            Set tsISS = fso.OpenTextFile(strTempISS & "\" & CLSID & ".iss", 2, True)

            'Create Response file for any Java Version
            tsISS.WriteLine "[InstallShield Silent]"
            tsISS.WriteLine "Version=v6.00.000"
            tsISS.WriteLine "File=Response File"
            tsISS.WriteLine "[File Transfer]"
            tsISS.WriteLine "OverwrittenReadOnly=NoToAll"
            tsISS.WriteLine "[" & CLSID & "-DlgOrder]"
            tsISS.WriteLine "Dlg0=" & CLSID & "-SprintfBox-0"
            tsISS.WriteLine "Count=2"
            tsISS.WriteLine "Dlg1=" & CLSID & "-File Transfer"
            tsISS.WriteLine "[" & CLSID & "-SprintfBox-0]"
            tsISS.WriteLine "Result=1"
            tsISS.WriteLine "[Application]"
            tsISS.WriteLine "Name=Java 2 Runtime Environment, SE v1.4.0_01"
            tsISS.WriteLine "Version=1.4.0_01"
            tsISS.WriteLine "Company=JavaSoft"
            tsISS.WriteLine "Lang=0009"
            tsISS.WriteLine "[" & CLSID & "-File Transfer]"
            tsISS.WriteLine "SharedFile=YesToAll"
            tsISS.Close

            strSetupexe = Left(strUninstallString, search4 + 9)
            strUninstCMD =  strSetupexe & strUnString & Chr(34) & strTempISS & "\" & CLSID & ".iss" & Chr(34)
        End If

        ts.WriteLine Now() & " - " & strDisplayName & "    - Version: " & strDisplayVersion
        ts.WriteLine Now() & " - Uninstall String sent: " & strUninstCMD
        ret = wshShell.Run(strUninstCMD , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1
    End If

Loop

tsIn.Close


'Now search the 64 bit Keys
Set tsIn = fso.OpenTextFile(strTempDir & "\uninstall.tmp", 1)

If Not fso.FolderExists(strTempISS) Then fso.CreateFolder(strTempISS)



Do While Not tsIn.AtEndOfStream
    strUninstLine = tsIn.ReadLine

    CLSID = Mid(strUninstLine, 85, 38)
    search5 = Instr(strUninstLine, "JRE 1")
    search6 = Instr(strUninstLine, "]")
    If search5 > 0 AND search6 > 0 Then
        strJRE1 = Replace(Mid(strUninstLine, search5, search6),"]","") 
    End If


    On Error Resume Next

    strDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayName")
    strDisplayVersion = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayVersion")
    strPublisher = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\Publisher")
    strUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\UninstallString")

    strJREUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\UninstallString")
    strJREDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\DisplayName")

    On Error Goto 0

    'Search for presence of Java and Sun in DisplayName and Publisher
    search1 = Instr(1, strDisplayName, "Java", 1)
    search2 = Instr(1, strPublisher, "Oracle", 1)
    search3 = Instr(1, strDisplayName, "Java(TM)", 1)
    search4 = Instr(1, strUninstallString, "setup.exe", 1)
    search7 = InStr(1, strDisplayName, "Development", 1) + InStr(1, strDisplayName, "Java DB", 1)

    If strJREUninstallString <> "" Then
        blFound = True
        '# JRE 1 found
        strJREUninstallStringNEW = Replace(strJREUninstallString," -f"," -s -a /s /f")
        ts.WriteLine Now() & " - " & strJREDisplayName
        ts.WriteLine Now() & " - Uninstall String sent: " & strJREUninstallStringNEW
        ret = wshShell.Run(strJREUninstallStringNEW , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1

    ElseIf search7 = 0 And search1 > 0 Or search3 > 0 And search2 > 0 Then
        blFound = True
        strUninstCMD = "msiexec.exe /x " & CLSID & " /norestart /qn"

        If search4 > 0 Then
            '# Old InstallShield setup found
            Set tsISS = fso.OpenTextFile(strTempISS & "\" & CLSID & ".iss", 2, True)

            'Create Response file for any Java Version
            tsISS.WriteLine "[InstallShield Silent]"
            tsISS.WriteLine "Version=v6.00.000"
            tsISS.WriteLine "File=Response File"
            tsISS.WriteLine "[File Transfer]"
            tsISS.WriteLine "OverwrittenReadOnly=NoToAll"
            tsISS.WriteLine "[" & CLSID & "-DlgOrder]"
            tsISS.WriteLine "Dlg0=" & CLSID & "-SprintfBox-0"
            tsISS.WriteLine "Count=2"
            tsISS.WriteLine "Dlg1=" & CLSID & "-File Transfer"
            tsISS.WriteLine "[" & CLSID & "-SprintfBox-0]"
            tsISS.WriteLine "Result=1"
            tsISS.WriteLine "[Application]"
            tsISS.WriteLine "Name=Java 2 Runtime Environment, SE v1.4.0_01"
            tsISS.WriteLine "Version=1.4.0_01"
            tsISS.WriteLine "Company=JavaSoft"
            tsISS.WriteLine "Lang=0009"
            tsISS.WriteLine "[" & CLSID & "-File Transfer]"
            tsISS.WriteLine "SharedFile=YesToAll"
            tsISS.Close

            strSetupexe = Left(strUninstallString, search4 + 9)
            strUninstCMD =  strSetupexe & strUnString & Chr(34) & strTempISS & "\" & CLSID & ".iss" & Chr(34)
        End If

        ts.WriteLine Now() & " - " & strDisplayName & "    - Version: " & strDisplayVersion
        ts.WriteLine Now() & " - Uninstall String sent: " & strUninstCMD
        ret = wshShell.Run(strUninstCMD , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1
    End If

Loop

tsIn.Close

If Not blFound Then
    ts.WriteLine Now() & " - No Java Runtime versions found installed."
    qVal = 0
End If

ts.WriteLine String(80, "_")
ts.WriteLine String(80, "¯")
ts.Close
fso.DeleteFolder(strTempISS)
fso.DeleteFile(strTempDir & "\uninstall.tmp")

WScript.Quit(qVal)

Sub PreFlight()
    '# Creates temp files containing extracts from registry 'Uninstall' keys.
    Dim wshShell, fso, sTemp
    Set wshShell = CreateObject("WScript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    sTemp = wshShell.ExpandEnvironmentStrings("%temp%")
    wshShell.Run "REGEDIT /E %temp%\registry.tmp HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall", 0, True
    wshShell.Run "REGEDIT /E %temp%\registry6432.tmp HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\microsoft\windows\currentversion\uninstall", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""{"" | find /i ""}]"" > %temp%\uninstall.tmp ", 0, True
wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""JRE 1"" >> %temp%\uninstall.tmp ", 0, True
    wshShell.Run "cmd /c type %temp%\registry6432.tmp | find /i ""{"" | find /i ""}]"" >> %temp%\uninstall.tmp ", 0, True
  wshShell.Run "cmd /c type %temp%\registry6432.tmp | find /i ""JRE 1"" >> %temp%\uninstall.tmp ", 0, True


    If Not fso.FileExists(sTemp & "\uninstall.tmp") Then
        ts.WriteLine Now() & " - No input - %temp%\uninstall.tmp Reg extract not created."
        ts.WriteLine String(80, "_")
        ts.WriteLine String(80, "¯")
        ts.Close
        WScript.Quit(1)
    End If
End Sub

Sub KillProc()
    '# kills jusched.exe and jqs.exe if they are running.  These processes will cause the installer to fail.
    Dim wshShell
    Set wshShell = CreateObject("WScript.Shell")
    wshShell.Run "Taskkill /F /IM jusched.exe /T", 0, True
    wshShell.Run "Taskkill /F /IM jqs.exe /T", 0, True
End Sub

Answered 03/02/2011 by: meofcourse
Yellow Belt

Please log in to comment
0

The script works great for all older versions, however  I can't get it to un-install "Java(TM) 6 Update 22"  or  "Java(TM) 6 Update 22" .  Looking at the old in c:\logs it never sees either 22 or 23 but is leaving  24 fine. 

Any ideas would be a great help.    Thanks in advance.

Answered 03/02/2011 by: xyzzy.deploy
Yellow Belt

Please log in to comment
0
ORIGINAL:  hipsterdoofus

I ran across this and the script is just what I need.  The only problem I'm running into is this:  The uninstall works fine, but on installation, it wants me to click to allow the executable to run (get a security warning). 

Is there a way around this?  Probably need a different implementation, but I was just running it out of a vbs script.




Answered 02/22/2011 by: hgsisbyoot
Yellow Belt

Please log in to comment
0

This script works great, but I have 2 different Java versions that I do not want removed.  Can anyone help me with adjusting the script for that?

Answered 02/07/2011 by: lyonjr
Yellow Belt

Please log in to comment
0
I would be nice to see some explanation around bugassert


' --- BUGASSERT (yes, it's for debugging) --------
Sub BugAssert (bTest, sErrMsg) 
' BugAssert is a Bruce McKinney creation. 
'  It is used to test for intermediate results... 
    if  bTest  then Exit Sub 
    MsgBox "Error Detected by BugAssert: " & vbCr & vbCr & sErrMsg, _
    vbCritical, " << BugAssert FAILED >> " 
    WScript.Quit
End Sub
Answered 01/12/2011 by: pjgeutjens
Red Belt

Please log in to comment
-1

"(searched for: "bugassert" site:microsoft.com on google)"

When I used this search, it produced only one article and it was in German (of course the code wasn't). I would be nice to see some explanation around bugassert.

Thanks,
Rob

Answered 01/12/2011 by: robmo
Senior Yellow Belt

Please log in to comment
1

Hi All,

Right now i'm packaging Apache 2.2.16 in Hp Server Automation tool... This code is really useful to me to uninstall all versions of apache...I'm writting a script to uninstall all versions of apache... But i couldn't understand some part of  your code...  Please help me out...

Here is the content of  registry.tmp for java

  [HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{3248F0A8-6813-11D6-A77B-00B0D0150220}]
"DisplayIcon"="C:\\Program Files\\Java\\jre1.5.0_22\\\\bin\\javaws.exe"
"AuthorizedCDFPrefix"=""
"Comments"=""
"Contact"="http://java.com"
"DisplayVersion"="1.5.0.220"
"HelpLink"=hex(2):68,00,74,00,74,00,70,00,3a,00,2f,00,2f,00,6a,00,61,00,76,00,\
  61,00,2e,00,63,00,6f,00,6d,00,00,00
"HelpTelephone"=""
"InstallDate"="20100324"
"InstallLocation"=""
"InstallSource"="C:\\Program Files\\Common Files\\Java\\Update\\Base Images\\jdk1.5.0.b64\\patch-jdk1.5.0_22.b03\\"
"ModifyPath"=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,78,\
  00,65,00,20,00,2f,00,49,00,7b,00,33,00,32,00,34,00,38,00,46,00,30,00,41,00,\
  38,00,2d,00,36,00,38,00,31,00,33,00,2d,00,31,00,31,00,44,00,36,00,2d,00,41,\
  00,37,00,37,00,42,00,2d,00,30,00,30,00,42,00,30,00,44,00,30,00,31,00,35,00,\
  30,00,32,00,32,00,30,00,7d,00,00,00
"NoRepair"=dword:00000001
"Publisher"="Sun Microsystems, Inc."
"Readme"=hex(2):43,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,20,\
  00,46,00,69,00,6c,00,65,00,73,00,5c,00,4a,00,61,00,76,00,61,00,5c,00,6a,00,\
  72,00,65,00,31,00,2e,00,35,00,2e,00,30,00,5f,00,32,00,32,00,5c,00,52,00,45,\
  00,41,00,44,00,4d,00,45,00,2e,00,74,00,78,00,74,00,00,00
"Size"=""
"EstimatedSize"=dword:00026a86
"UninstallString"=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,\
  78,00,65,00,20,00,2f,00,49,00,7b,00,33,00,32,00,34,00,38,00,46,00,30,00,41,\
  00,38,00,2d,00,36,00,38,00,31,00,33,00,2d,00,31,00,31,00,44,00,36,00,2d,00,\
  41,00,37,00,37,00,42,00,2d,00,30,00,30,00,42,00,30,00,44,00,30,00,31,00,35,\
  00,30,00,32,00,32,00,30,00,7d,00,00,00
"URLInfoAbout"="http://java.com"
"URLUpdateInfo"="http://java.sun.com"
"VersionMajor"=dword:00000001
"VersionMinor"=dword:00000005
"WindowsInstaller"=dword:00000001
"Version"=dword:01050000
"Language"=dword:00000000
"DisplayName"="J2SE Runtime Environment 5.0 Update 22"


Here is the Content of  uninstall.tmp

[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{230F86C
D-B770-D07B-233E-CA7A0BE7C2F8}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{24A42B0
F-D4C7-529B-26CC-AEFC82D0BC63}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{2B6F677
1-46DA-4DEB-B738-E809A81B17F7}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{2B87710
3-4E7A-76A9-54FA-090928386EA5}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{31030E4
E-8532-4A22-B615-9F7A48F69C36}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{3248F0A
8-6813-11D6-A77B-00B0D0150150}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{3248F0A
8-6813-11D6-A77B-00B0D0150220}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{3266D4D
E-9CD0-48AC-9B2D-1D4879DB440F}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{32A3A4F
4-B792-11D6-A78A-00B0D0150220}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{340F521
E-3576-4E1A-B75C-EB0ACF751379}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{34D2AB4
0-150D-475D-AE32-BD23FB5EE355}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{35E1EC4
3-D4FC-4E4A-AAB3-20DDA27E8BB0}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{393E4C8
9-67E9-43BF-AD29-94D19F7624F7}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{3EF30B5
E-72C5-9F75-412C-854A76357ABA}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{4302B2D
D-D958-40E3-BAF3-B07FFE1978CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{459A192
5-3E15-5048-3D69-8DE5E0D818A9}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{4723f19
9-fa64-4233-8e6e-9fccc95a18ee}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{4A08656
4-70A4-624E-4C71-B5FF6879381F}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{4AC17C8
A-995C-C134-060C-06F5A46B631F}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{4C203E3
5-B5C7-4E35-9834-619668C0FFEE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{4D9D12C
D-B714-4A8F-A4AB-C33C4DD7F770}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{52E056C
5-3A1A-3489-346C-3D4D515097F5}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{53543B6
A-4143-1408-E112-D33A5041AE60}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{56C049B
E-79E9-4502-BEA7-9754A3E60F9B}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{56C8B4D
3-6EE0-1736-9D0F-D21AA1B7C6FA}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{57F1AB5
A-0B9A-4229-B231-B1516A33DCD4}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{58FA9DE
A-8C66-EEAD-DBD3-80EE16A1A01A}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{5D97A4A
7-C274-4B63-86D9-07A33435F505}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{619CDD8
A-14B6-43a1-AB6C-0F4EE48CE048}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{6675CA7
F-E51B-4F6A-99D4-F8F0124C6EAA}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{69333A0
4-5134-40A5-A055-9166A7AA1EC8}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{6E93D44
A-870D-823C-F0B2-09D96E8DE87B}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{6EF1FB2
A-DBFA-404F-972A-AECD03600615}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{716E030
6-8318-4364-8B8F-0CC4E9376BAC}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{7299052
b-02a4-4627-81f2-1818da5d550d}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{732A3F8
0-008B-4350-BD58-EC5AE98707B8}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{7526ECB
4-72A6-5309-A0EC-176BFD3D1AB9}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{770657D
0-A123-3C07-8E44-1C83EC895118}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{7921591
1-EEFD-4867-86D9-B79F215DED3F}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{7EEFC91
F-8C6A-4AF0-90C2-B4BD42C63B6B}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{7F10292
C-A190-4176-A665-A1ED3478DF86}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{837b34e
3-7c30-493c-8f6a-2b0f04e2912c}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{83FFCFC
7-88C6-41c6-8752-958A45325C82}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{84A3F36
5-81F3-2D0C-3592-514332C1745D}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{85262A0
6-2D8C-4BC1-B6ED-5A705D09CFFC}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{86493AD
D-824D-4B8E-BD72-8C5DCDC52A71}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{8A400C2
D-586C-80F4-8637-969C8E759083}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{0B36C6D6-F5D8-4EAF-BF94-4376A230AD5B}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{1109D0B3-EFA3-4553-AAED-4C3E9AD130E8}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{1142CCEC-ACA9-484B-BA90-C3A5CA1988C5}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{289FA8BC-6A8E-4341-B194-EB26B49E9F5D}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{48113C06-9BA2-4D54-A731-D1D2C5B3144A}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{5857EE21-03D0-482E-9620-5A30B314A2AE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{5A4E43D5-858F-49BD-BA72-8F30E1793060}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{69F52148-9BF6-4CDC-BF76-103DEAF3DD08}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{71127777-8B2C-4F97-AF7A-6CF8CAC8224D}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{7E9103DA-253F-41FF-9E83-7C83806C77DA}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{7F207DCA-3399-40CB-A968-6E5991B1421A}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{8CCB781A-CF6B-4FCB-B6D8-59C64DF5C6DB}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{ACB40B61-03E6-4F6F-AA5E-7B02A89E8AD3}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{B0EC5722-241F-4CDA-83B4-AA5846B6F9F4}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{C3F9A0DC-A5D1-4BB6-870E-2953E5A2487B}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{E8766951-2B6C-4022-86E8-80D2D1762B76}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{F5B70033-E79C-4569-90BF-BC9B4E4F3F46}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0011-0000-0000-0000000FF1CE}_PROPLUS_{FCD742B9-7A55-44BC-A776-F795F21FEDDC}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0015-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0015-0409-0000-0000000FF1CE}_PROPLUS_{2FC4457D-409E-466F-861F-FB0CB796B53E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0016-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0016-0409-0000-0000000FF1CE}_PROPLUS_{2FC4457D-409E-466F-861F-FB0CB796B53E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0018-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0018-0409-0000-0000000FF1CE}_PROPLUS_{2FC4457D-409E-466F-861F-FB0CB796B53E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0019-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0019-0409-0000-0000000FF1CE}_PROPLUS_{2FC4457D-409E-466F-861F-FB0CB796B53E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-001A-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-001A-0409-0000-0000000FF1CE}_PROPLUS_{2FC4457D-409E-466F-861F-FB0CB796B53E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-001B-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-001B-0409-0000-0000000FF1CE}_PROPLUS_{2FC4457D-409E-466F-861F-FB0CB796B53E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-001F-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-001F-0409-0000-0000000FF1CE}_PROPLUS_{ABDDE972-355B-4AF1-89A8-DA50B7B5C045}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-001F-040C-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-001F-040C-0000-0000000FF1CE}_PROPLUS_{F580DDD5-8D37-4998-968E-EBB76BB86787}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-001F-0C0A-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-001F-0C0A-0000-0000000FF1CE}_PROPLUS_{187308AB-5FA7-4F14-9AB9-D290383A10D9}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-002C-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-003B-0000-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-003B-0000-0000-0000000FF1CE}_PRJPRO_{69F52148-9BF6-4CDC-BF76-103DEAF3DD08}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-003B-0000-0000-0000000FF1CE}_PRJPRO_{7F207DCA-3399-40CB-A968-6E5991B1421A}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-003B-0000-0000-0000000FF1CE}_PRJPRO_{9E73617F-2F38-4864-BD61-BB2DDFE43323}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-003B-0000-0000-0000000FF1CE}_PRJPRO_{B0EC5722-241F-4CDA-83B4-AA5846B6F9F4}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-003B-0000-0000-0000000FF1CE}_PRJPRO_{FCD742B9-7A55-44BC-A776-F795F21FEDDC}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0044-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0044-0409-0000-0000000FF1CE}_PROPLUS_{2FC4457D-409E-466F-861F-FB0CB796B53E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-006E-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-006E-0409-0000-0000000FF1CE}_PROPLUS_{DE5A002D-8122-4278-A7EE-3121E7EA254E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-00B2-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-00B4-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-00B4-0409-0000-0000000FF1CE}_PRJPRO_{27A9D316-D332-433B-8EB1-1D93EE49F26D}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0115-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0115-0409-0000-0000000FF1CE}_PROPLUS_{DE5A002D-8122-4278-A7EE-3121E7EA254E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0117-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0117-0409-0000-0000000FF1CE}_PROPLUS_{2FC4457D-409E-466F-861F-FB0CB796B53E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9068B2B
E-D93A-4C0A-861C-5E35E2C0E09E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{90A4040
9-6000-11D3-8CFE-0150048383C9}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{90FE5BF
C-C6C5-45D3-A7E3-463D707E2D44}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{91810AF
C-A4F8-4EBA-A5AA-B198BBC81144}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{931FDF4
F-35D0-4981-A43A-C3252690DCFB}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{99B39D4
0-5EA1-440C-BA46-5DE3FA6E8388}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9AC2D55
4-AC12-4F1F-AAB9-E6363ADE5381}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9CFA6FC
5-9C68-C109-2825-8E9995CE976B}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9F27CE3
B-CF94-3125-10AE-C0C19D36CA78}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9FDF923
E-DB53-41E4-8CE6-8DEB8301C12E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{A235751
1-D51D-EC3D-78C9-B4B2F2C53C8C}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{A6DC38F
E-7822-7F01-2DDE-69FE14F86F4E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC19485
5-F7AC-4D04-B4C9-07BA46FCB697}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC76BA8
6-7AD7-1033-7B44-A93000000001}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC76BA8
6-7AD7-2447-0000-900000000003}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC76BA8
6-7AD7-2448-0000-900000000003}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC76BA8
6-7AD7-5670-0000-900000000003}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC76BA8
6-7AD7-5760-0000-900000000003}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{B332732
A-4958-41DD-B439-DDA2D32753C5}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{B363D4F
3-E2AD-66D7-884E-B02802EF55CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{B43357A
A-3A6D-4D94-B56E-43C44D09E548}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{B639A4D
E-A375-47D3-89C3-DDCF98D992F7}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{B6EC738
8-E277-4A5B-8C8F-71067A41BA64}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{C299012
A-DB39-4E9D-B360-75F83A7D5252}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{C490188
1-CA4A-48BD-BD48-C4CA87C1DD7C}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{C8B0680
B-CDAE-4809-9F91-387B6DE00F7C}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{C948C54
1-4E5A-5BE6-0549-2F621FF7AABC}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{CB2F7ED
D-9D1F-43C1-90FC-4F52EAE172A1}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{CD95F66
1-A5C4-44F5-A6AA-ECDD91C240BD}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{CE2CDD6
2-0124-36CA-84D3-9F4DCF5C5BD9}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{CEDD2E9
3-D66A-3903-CAB9-3F765C5D5D42}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{D7247BD
D-F68C-445A-9CF4-AF4ED6C3D8F0}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{D7B96D9
6-D9F4-40B7-B913-3D50BDD87C6F}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{DF54EF7
8-7231-46F8-8302-F1855F70099E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{DF6F178
9-2C07-49CB-993D-6B3D5586C34E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{E1B4287
B-D112-02F6-7E84-7CA8D8193988}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{E4EA6A5
A-E6FE-481E-81D0-958B2713B62C}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{E5623D0
5-F02B-E887-1B88-9C4237194062}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{E5BA043
0-919F-46DD-B656-0796F8A5ADFF}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{EACB261
C-5C4D-4CB4-B8CC-0EF998C5B3E8}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{EE20BC2
3-49BE-430D-9866-ABB01D81A407}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{F1555F7
9-380E-E2B4-9AC2-459831B9B52F}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{F18DB86
D-BC16-4E01-BCCE-63F62B931D82}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{F7B0E59
9-C114-4493-BC4D-D8FC7CBBABBB}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{FA9F595
0-2F2A-7340-7F34-0592DB64F7D9}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{FBE1CEA
C-5D54-6A03-A52E-E01E1F476CBE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{FD9E03B
5-AEEA-4D59-B512-6CE4AA0281D4}]

I couldn't understand what this part ll do

If Not fso.FolderExists(strTempISS) Then fso.CreateFolder(strTempISS)
Do While Not tsIn.AtEndOfStream
    strUninstLine = tsIn.ReadLine
    CLSID = Mid(strUninstLine, 73, 38)
    search5 = Instr(strUninstLine, "JRE 1")
    search6 = Instr(strUninstLine, "]")
    If search5 > 0 AND search6 > 0 Then
        strJRE1 = Replace(Mid(strUninstLine, search5, search6),"]","") 
    End If

the above code part is reading the lines from unisntall.tmp.... what would be the value of "strJRE1"
My system has 3 JRE versions... JRE 1.5.0 update 15, update 22... JRE 16 update 13
  I'm getting no value in strJRE1...

What are u trying to get at this part

sJREUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\UninstallString")
strJREDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\DisplayName")


strUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\UninstallString")

The uninstall string line returns empty string... How can i get the uninstall string

Please guide me...
So that i can finish my  apache uninstall code...
So far what i'vedone in my code 

Dim wshShell, fso,  strLogPath, sTemp, strTempDir, strTempISS, tsIn, strUninstLine, CLSID, search5, search6, strJRE, strPublisher
    Set wshShell = CreateObject("WScript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    strLogPath = wshShell.ExpandEnvironmentStrings("%temp%") & "\Log\"
    If Not fso.FolderExists(strLogPath) Then fso.CreateFolder(strLogPath)
  strLogFile = strLogPath & "Apache_Uninstall_" & strComputername & ".log"
  WScript.Echo strLogFile
  Set ts = fso.OpenTextFile(strLogFile, 8, True)
  ts.WriteLine String(120,"_")
  ts.WriteLine String(120,"-")
  ts.WriteLine Now() & "apache_uninstall_" & ".log"
  ts.WriteLine String(120,"_") & vbCrLf
  sTemp = wshShell.ExpandEnvironmentStrings("%temp%")
    wshShell.Run "REGEDIT /E %temp%\registry.tmp HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""{"" | find /i ""}]"" > %temp%\uninstall.tmp ", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""Apache"" >> %temp%\uninstall.tmp ", 0, True
    If Not fso.FileExists(sTemp & "\uninstall.tmp") Then
        ts.WriteLine Now() & " - No input - %temp%\uninstall.tmp Reg extract not created."
        ts.WriteLine String(120, "_")
        ts.WriteLine String(120, "¯")
        ts.Close

    End If
strTempDir = wshShell.ExpandEnvironmentStrings("%temp%")
strTempISS = strTempDir & "\iss"
strUnString = " -s -a /s /f1"
Set tsIn = fso.OpenTextFile(strTempDir & "\uninstall.tmp", 1)
If Not fso.FolderExists(strTempISS) Then fso.CreateFolder(strTempISS)
Do While Not tsIn.AtEndOfStream
    strUninstLine = tsIn.ReadLine
    CLSID = Mid(strUninstLine, 73, 38)
    strPublisher = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\Publisher")


    On Error Resume Next
    'WScript.Echo strPublisher
    intComparision = StrComp(strPublisher,"Apache Software Foundation")

    'WScript.Echo displaycompare
    If intComparision = 0  Then
    WScript.Echo CLSID
    strDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayName")
    displaycompare = Instr(1,strDisplayName,"Apache HTTP Server") 
      If  displaycompare > 0 Then


      strApacheUninstallString= wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\UninstallString")
      strDisplayVersion = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayVersion")
        WScript.Echo strApacheUnistallString
      searchCurVer = InStr(1,strDisplayVersion,"2.2.16",1)
      If searchCurVer >0 Then
        CurVerFound = True
        WScript.Echo "Apache Http Server 2.2.16 is already installed...."

      End if
    End If
    End if


Loop
tsIn.Close
  WScript.Quit(0)





I've to proceed futher  with the elseif part of currentversion... in my apache code  such as

If searchCurVer > 0 Then
    CurVerFound = True
ElseIf strJREUninstallString <> "" Then

For Your reference
Here is my uninstall.tmp



[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0115-0409-0000-0000000FF1CE}_PROPLUS_{DE5A002D-8122-4278-A7EE-3121E7EA254E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0117-0409-0000-0000000FF1CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9012000
0-0117-0409-0000-0000000FF1CE}_PROPLUS_{2FC4457D-409E-466F-861F-FB0CB796B53E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9068B2B
E-D93A-4C0A-861C-5E35E2C0E09E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{90A4040
9-6000-11D3-8CFE-0150048383C9}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{90FE5BF
C-C6C5-45D3-A7E3-463D707E2D44}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{91810AF
C-A4F8-4EBA-A5AA-B198BBC81144}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{931FDF4
F-35D0-4981-A43A-C3252690DCFB}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{99B39D4
0-5EA1-440C-BA46-5DE3FA6E8388}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9AC2D55
4-AC12-4F1F-AAB9-E6363ADE5381}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9CFA6FC
5-9C68-C109-2825-8E9995CE976B}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9F27CE3
B-CF94-3125-10AE-C0C19D36CA78}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{9FDF923
E-DB53-41E4-8CE6-8DEB8301C12E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{A235751
1-D51D-EC3D-78C9-B4B2F2C53C8C}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{A6DC38F
E-7822-7F01-2DDE-69FE14F86F4E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC19485
5-F7AC-4D04-B4C9-07BA46FCB697}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC76BA8
6-7AD7-1033-7B44-A93000000001}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC76BA8
6-7AD7-2447-0000-900000000003}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC76BA8
6-7AD7-2448-0000-900000000003}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC76BA8
6-7AD7-5670-0000-900000000003}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{AC76BA8
6-7AD7-5760-0000-900000000003}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{B332732
A-4958-41DD-B439-DDA2D32753C5}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{B363D4F
3-E2AD-66D7-884E-B02802EF55CE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{B43357A
A-3A6D-4D94-B56E-43C44D09E548}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{B639A4D
E-A375-47D3-89C3-DDCF98D992F7}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{B6EC738
8-E277-4A5B-8C8F-71067A41BA64}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{C299012
A-DB39-4E9D-B360-75F83A7D5252}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{DF54EF7
8-7231-46F8-8302-F1855F70099E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{DF6F178
9-2C07-49CB-993D-6B3D5586C34E}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{E1B4287
B-D112-02F6-7E84-7CA8D8193988}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{E4EA6A5
A-E6FE-481E-81D0-958B2713B62C}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{E5623D0
5-F02B-E887-1B88-9C4237194062}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{E5BA043
0-919F-46DD-B656-0796F8A5ADFF}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{EACB261
C-5C4D-4CB4-B8CC-0EF998C5B3E8}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{EE20BC2
3-49BE-430D-9866-ABB01D81A407}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{F1555F7
9-380E-E2B4-9AC2-459831B9B52F}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{F18DB86
D-BC16-4E01-BCCE-63F62B931D82}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{F7B0E59
9-C114-4493-BC4D-D8FC7CBBABBB}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{FA9F595
0-2F2A-7340-7F34-0592DB64F7D9}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{FBE1CEA
C-5D54-6A03-A52E-E01E1F476CBE}]
[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{FD9E03B
5-AEEA-4D59-B512-6CE4AA0281D4}]
"Contact"="Apache Users Mailing List"
"Publisher"="Apache Software Foundation"
"URLInfoAbout"="http://httpd.apache.org/"
"URLUpdateInfo"="http://www.apache.org/dist/httpd/binaries/win32/"
"DisplayName"="Apache HTTP Server 2.2.16"


Here is the content of Apache HTTP server in registry.tmp

[HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall\{85262A06-2D8C-4BC1-B6ED-5A705D09CFFC}]
"AuthorizedCDFPrefix"=""
"Comments"=""
"Contact"="Apache Users Mailing List"
"DisplayVersion"="2.2.16"
"HelpLink"=hex(2):68,00,74,00,74,00,70,00,3a,00,2f,00,2f,00,68,00,74,00,74,00,\
  70,00,64,00,2e,00,61,00,70,00,61,00,63,00,68,00,65,00,2e,00,6f,00,72,00,67,\
  00,2f,00,75,00,73,00,65,00,72,00,73,00,6c,00,69,00,73,00,74,00,2e,00,68,00,\
  74,00,6d,00,6c,00,00,00
"HelpTelephone"="N/A"
"InstallDate"="20100828"
"InstallLocation"=""
"InstallSource"="C:\\Users\\kaliappu\\Desktop\\Content Factory\\"
"ModifyPath"=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,78,\
  00,65,00,20,00,2f,00,49,00,7b,00,38,00,35,00,32,00,36,00,32,00,41,00,30,00,\
  36,00,2d,00,32,00,44,00,38,00,43,00,2d,00,34,00,42,00,43,00,31,00,2d,00,42,\
  00,36,00,45,00,44,00,2d,00,35,00,41,00,37,00,30,00,35,00,44,00,30,00,39,00,\
  43,00,46,00,46,00,43,00,7d,00,00,00
"Publisher"="Apache Software Foundation"
"Readme"=""
"Size"=""
"EstimatedSize"=dword:00008744
"UninstallString"=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,\
  78,00,65,00,20,00,2f,00,49,00,7b,00,38,00,35,00,32,00,36,00,32,00,41,00,30,\
  00,36,00,2d,00,32,00,44,00,38,00,43,00,2d,00,34,00,42,00,43,00,31,00,2d,00,\
  42,00,36,00,45,00,44,00,2d,00,35,00,41,00,37,00,30,00,35,00,44,00,30,00,39,\
  00,43,00,46,00,46,00,43,00,7d,00,00,00
"URLInfoAbout"="http://httpd.apache.org/"
"URLUpdateInfo"="http://www.apache.org/dist/httpd/binaries/win32/"
"VersionMajor"=dword:00000002
"VersionMinor"=dword:00000002
"WindowsInstaller"=dword:00000001
"Version"=dword:02020010
"Language"=dword:00000409
"DisplayName"="Apache HTTP Server 2.2.16"



But i need to know what would be the strJREUninstallString.. based on that .. i can change the code and ll finish apache uninstall code...
Please help me out...
Thanks in advance...



Regards,
uma

Answered 09/12/2010 by: umaparvathy
Yellow Belt

Please log in to comment
0
it wants me to click to allow the executable to run (get a security warning).


notepad <your file>:Zone.Identifier



Answered 07/07/2010 by: pjgeutjens
Red Belt

Please log in to comment
0

That's an XP thing, perhaps applied via GroupPolicy? There's nothing a package can do to bypass that.

Answered 07/07/2010 by: VBScab
Red Belt

Please log in to comment
0

I ran across this and the script is just what I need.  The only problem I'm running into is this:  The uninstall works fine, but on installation, it wants me to click to allow the executable to run (get a security warning). 

Is there a way around this?  Probably need a different implementation, but I was just running it out of a vbs script.

Answered 07/07/2010 by: hipsterdoofus
Orange Senior Belt

Please log in to comment
0

Hmm. I'll need to look at my work computer and see how it's written. I was typing from an iPad yesterday so I may have typed it in wrong when i was responding back to the thread. Hopefully that is it. :)

Answered 04/16/2010 by: yeah yeah
Senior Yellow Belt

Please log in to comment
0
Whenever I try to run ComputerX latest script, it fails on:
Set fso = CreateObject("Scripting.FileSystem.Object")




Set fso = CreateObject("Scripting.FileSystem.Object")
Set fso = CreateObject("Scripting.FileSystemObject")

Answered 04/16/2010 by: pjgeutjens
Red Belt

Please log in to comment
0

This is an old thread but i'll try to resurrect the topic.

Whenever I try to run ComputerX latest script, it fails on:
Set fso = CreateObject("Scripting.FileSystem.Object")

I get an  ActiveX 800A004c path not found errors. This happens locally and when I push via SMS.

Thoughts?

Answered 04/15/2010 by: yeah yeah
Senior Yellow Belt

Please log in to comment
0

Might want to check the OS architecture and include the following reg path in the PreFlight for 64bit systems: "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall". [8|]

Answered 08/18/2009 by: rmmiles
Yellow Belt

Please log in to comment
1

Alas, I do not code.  Therefor I am limited to what I can get people to do for me.

Here is our latest version.  It is slightly reworked to avoid some false positives.



'# Galen Dobbs - 13:20 23/03/2009
'# Uninstalls all but the chosen version of Java Runtime.
'# If the current version is not installed, it installs it from the specified path.
'# Based on a script by 'Daz' from Appdeploy.com message boards.
'# http://itninja.com/question/stopping-a-service09


Option Explicit

Dim wshShell, fso, strLogFile, ts, strTempDir, strTempISS, strUnString, tsIn
Dim strUninstLine, CLSID, search5, search6, search7, strJRE1, strDisplayName, strDisplayVersion
Dim strPublisher, strUninstallString, strJREUninstallString, strJREDisplayName
Dim search1, search2, search3, search4, strJREUninstallStringNEW, ret, strUninstCMD
Dim tsISS, strSetupexe, qVal, strComputername, strCurrentVersion, strInstallMST
Dim searchCurVer, CurVerFound, strArrayCount, strLogPath, strInstallCMD, strInstallMSI, strInstallLog

Dim arrayJREDisplayName()
Dim arrayJREUninstallString()

'# Change this to match the version that you don't want to have it uninstall
strCurrentVersion = "Java(TM) 6 Update 13"

'# Set these to the desired log path and current version installer location
strLogPath = "\\[LogPath]\_Logs\"
strInstallMSI = "\\[InstallPath]\jre1.6.0.13.msi"
strInstallMST = "\\[InstallPath]\jre1.6.0.13.mst"

qVal = 0
strArrayCount = 0
ReDim arrayJREDisplayName(strArrayCount)
ReDim arrayJREUninstallString(strArrayCount)

Set wshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

strComputername = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

'# Set this to the appropriate command line settings to do a silent MSI install
strInstallLog = strLogPath & "Java_Install_" & strComputername & ".log"
strInstallCMD = "msiexec /I """ & strInstallMSI & """ /t """ & strInstallMST & """ /QN /Lime """ & strInstallLog & """"

If Not fso.FolderExists(strLogPath) Then fso.CreateFolder(strLogPath)
strLogFile = strLogPath & "Java_Uninstall_" & strComputername & ".log"
Set ts = fso.OpenTextFile(strLogFile, 8, True)

ts.WriteLine String(120, "_")
ts.WriteLine String(120, "¯")
ts.WriteLine Now() & " - Java Runtime(s) uninstallation started..."
ts.WriteLine String(120, "_") & vbCrlf

'# Generate Registry extracts from 'Uninstall' keys.
PreFlight()

'# Kill Java Processes
KillProc()

strTempDir = wshShell.ExpandEnvironmentStrings("%temp%")
strTempISS = strTempDir & "\iss"
strUnString = " -s -a /s /f1"
Set tsIn = fso.OpenTextFile(strTempDir & "\uninstall.tmp", 1)

If Not fso.FolderExists(strTempISS) Then fso.CreateFolder(strTempISS)

Do While Not tsIn.AtEndOfStream
    strUninstLine = tsIn.ReadLine
    CLSID = Mid(strUninstLine, 73, 38)
    search5 = Instr(strUninstLine, "JRE 1")
    search6 = Instr(strUninstLine, "]")
    If search5 > 0 AND search6 > 0 Then
        strJRE1 = Replace(Mid(strUninstLine, search5, search6),"]","") 
    End If

    On Error Resume Next

    strDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayName")
    strDisplayVersion = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayVersion")
    strPublisher = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\Publisher")
    strUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\UninstallString")

    strJREUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\UninstallString")
    strJREDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\DisplayName")

    On Error Goto 0

    'Search for presence of Java and Sun in DisplayName and Publisher
    search1 = Instr(1, strDisplayName, "Java", 1)
    search2 = Instr(1, strPublisher, "Sun", 1)
    search3 = Instr(1, strDisplayName, "J2SE", 1)
    search4 = Instr(1, strUninstallString, "setup.exe", 1)
    search7 = InStr(1, strDisplayName, "Development", 1) + InStr(1, strDisplayName, "Java DB", 1)

    'See if it is the current version
    searchCurVer = InStr(1, strDisplayName, strCurrentVersion, 1)

    'If it is, Show that the current version is found
    If searchCurVer > 0 Then
    CurVerFound = True

    ElseIf strJREUninstallString <> "" Then
        '# JRE 1 found
        strJREUninstallStringNEW = Replace(strJREUninstallString," -f"," -s -a /s /f")
    redim Preserve arrayJREDisplayName(strArrayCount)
    redim Preserve arrayJREUninstallString(strArrayCount)
        arrayJREDisplayName(strArrayCount) = " - Found Old JRE: " & strDisplayName & "  - Version: " & strDisplayVersion & ", Uninstalling..."
    arrayJREUninstallString(strArrayCount) = strJREUninstallStringNEW
    strArrayCount = strArrayCount + 1

    ElseIf search7 = 0 And search1 > 0 Or search3 > 0 And search2 > 0 Then
        strUninstCMD = "msiexec.exe /x " & CLSID & " /norestart /qn"

        If search4 > 0 Then
            '# Old InstallShield setup found
            Set tsISS = fso.OpenTextFile(strTempISS & "\" & CLSID & ".iss", 2, True)

            'Create Response file for any Java Version
            tsISS.WriteLine "[InstallShield Silent]"
            tsISS.WriteLine "Version=v6.00.000"
            tsISS.WriteLine "File=Response File"
            tsISS.WriteLine "[File Transfer]"
            tsISS.WriteLine "OverwrittenReadOnly=NoToAll"
            tsISS.WriteLine "[" & CLSID & "-DlgOrder]"
            tsISS.WriteLine "Dlg0=" & CLSID & "-SprintfBox-0"
            tsISS.WriteLine "Count=2"
            tsISS.WriteLine "Dlg1=" & CLSID & "-File Transfer"
            tsISS.WriteLine "[" & CLSID & "-SprintfBox-0]"
            tsISS.WriteLine "Result=1"
            tsISS.WriteLine "[Application]"
            tsISS.WriteLine "Name=Java 2 Runtime Environment, SE v1.4.0_01"
            tsISS.WriteLine "Version=1.4.0_01"
            tsISS.WriteLine "Company=JavaSoft"
            tsISS.WriteLine "Lang=0009"
            tsISS.WriteLine "[" & CLSID & "-File Transfer]"
            tsISS.WriteLine "SharedFile=YesToAll"
            tsISS.Close

            strSetupexe = Left(strUninstallString, search4 + 9)
            strUninstCMD =  strSetupexe & strUnString & Chr(34) & strTempISS & "\" & CLSID & ".iss" & Chr(34)
        End If

    redim Preserve arrayJREDisplayName(strArrayCount)
    redim Preserve arrayJREUninstallString(strArrayCount)
    arrayJREDisplayName(strArrayCount) = " - Found Old JRE: " & strDisplayName & "    - Version: " & strDisplayVersion & ", Uninstalling..."
    arrayJREUninstallString(strArrayCount) = strUninstCMD
    strArrayCount = strArrayCount + 1

    End If

Loop

tsIn.Close

Dim I
If CurVerFound AND strArrayCount > 0 Then
    ts.Writeline Now() & " - Current Version: " & strCurrentVersion & " found, continuing with uninstalls..."
    For I = LBOUND(arrayJREDisplayName) to UBOUND(arrayJREDisplayName)
        ts.WriteLine Now() & arrayJREDisplayName(I)
        ts.WriteLine Now() & " - Uninstall String sent: " & arrayJREUninstallString(I)
        ret = wshShell.Run(arrayJREUninstallString(I) , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1
    Next

ElseIf CurVerFound AND strArrayCount = 0 Then
    ts.WriteLine Now() & " - Current version, " & strCurrentVersion & ", found." 
    ts.WriteLine Now() & " - No Old Java Runtime versions are installed."
    qVal = 99

ElseIf Not CurVerFound Then

    ts.WriteLine Now() & " - Current Java version, " & strCurrentVersion & ", not found, installing it."
    ts.WriteLine Now() & " - Running Command: " & strInstallCMD
    ret = wshShell.Run(strInstallCMD , 0, True)
    If ret <> 0 AND ret<> 3010 Then
        ts.WriteLine Now() & " - Failed to Install Java, see " & strInstallLog & " for more details.  Exiting Script."
        qVal = 1
    ElseIf strArrayCount > 0 Then
        ts.WriteLine Now() & " - Successfully installed " & strCurrentVersion & ", and logged to " & strInstallLog & "."
        For I = LBOUND(arrayJREDisplayName) to UBOUND(arrayJREDisplayName)
        ts.WriteLine Now() & arrayJREDisplayName(I)
        ts.WriteLine Now() & " - Uninstall String sent: " & arrayJREUninstallString(I)
        ret = wshShell.Run(arrayJREUninstallString(I) , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1
    Next
    ElseIf strArrayCount = 0 Then
        ts.WriteLine Now() & " - Successfully installed " & strCurrentVersion & ", and logged to " & strInstallLog & "."
    ts.WriteLine Now() & " - No Old Java Runtime versions are installed."
        qVal = 99
    End If
End If

ts.WriteLine String(120, "_")
ts.WriteLine String(120, "¯")
ts.Close
fso.DeleteFolder(strTempISS)
fso.DeleteFile(strTempDir & "\uninstall.tmp")

WScript.Quit(qVal)

Sub PreFlight()
    '# Creates temp files containing extracts from registry 'Uninstall' keys.
    Dim wshShell, fso, sTemp
    Set wshShell = CreateObject("WScript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    sTemp = wshShell.ExpandEnvironmentStrings("%temp%")
    wshShell.Run "REGEDIT /E %temp%\registry.tmp HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""{"" | find /i ""}]"" > %temp%\uninstall.tmp ", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""JRE 1"" >> %temp%\uninstall.tmp ", 0, True
    If Not fso.FileExists(sTemp & "\uninstall.tmp") Then
        ts.WriteLine Now() & " - No input - %temp%\uninstall.tmp Reg extract not created."
        ts.WriteLine String(120, "_")
        ts.WriteLine String(120, "¯")
        ts.Close
        WScript.Quit(1)
    End If
End Sub

Sub KillProc()
    '# kills jusched.exe and jqs.exe if they are running.  These processes will cause the installer to fail.
    Dim wshShell
    Set wshShell = CreateObject("WScript.Shell")
    wshShell.Run "Taskkill /F /IM jusched.exe /T", 0, True
    wshShell.Run "Taskkill /F /IM jqs.exe /T", 0, True
End Sub



Answered 04/02/2009 by: ComputerX
Yellow Belt

Please log in to comment
0

Thanks guys, I am using the version that doesn't install anything. So far I've been testing this script against my VM machines and deployed to a collection of test pc's via SCCM successfully.

Answered 03/31/2009 by: JeanM
Senior Yellow Belt

Please log in to comment
0
Please note that Galen Dobbs' later version of my script sets qVal to 99 in more than one place.
Answered 03/30/2009 by: VBScab
Red Belt

Please log in to comment
0

Jean,

Please note that Galen Dobbs' later version of my script sets qVal to 99 in more than one place.

I suggest that you, and indeed anyone using these scripts, tests, tests, tests and tests again before rolling any version of this script out to your live estate.

Regards and good luck,
Daz.

Answered 03/29/2009 by: Daz
Orange Belt

Please log in to comment
0
ORIGINAL:  JeanM

Hello,

do I just change it here "qVal = 99" ?

Thanks






Answered 03/29/2009 by: Daz
Orange Belt

Please log in to comment
1

Jean ... look that article about the return codes!

Some return codes will try to perform the installation again, other give the SMS a failed message and other return a successfully!

http://myitforum.com/cs2/blogs/mniehaus/archive/2005/03/16/4018.aspx

If everythings ocurrs fine... return "0"!

I hope this can help you!

Answered 03/28/2009 by: clyrigham
Orange Belt

Please log in to comment
0

Hello,

First I wanted to thank you guys for this script. I am testing deploying it via SCCM/SMS and wanted to know if it's ok to change the exit code from 99 to something else. I can follow the code, but I am not an expert, do I just change it here "qVal = 99" ?

SCCM considers 99 as a failure.

Thanks

Answered 03/27/2009 by: JeanM
Senior Yellow Belt

Please log in to comment
1

Here is our latest version.

'# Galen Dobbs - 13:20 23/03/2009
'# Uninstalls all but the chosen version of Java Runtime.
'# If the current version is not installed, it installs it from the specified path.
'# Based on a script by 'Daz' from Appdeploy.com message boards.
'# http://itninja.com/question/stopping-a-service09


Option Explicit

Dim wshShell, fso, strLogFile, ts, strTempDir, strTempISS, strUnString, tsIn
Dim strUninstLine, CLSID, search5, search6, search7, strJRE1, strDisplayName, strDisplayVersion
Dim strPublisher, strUninstallString, strJREUninstallString, strJREDisplayName
Dim search1, search2, search3, search4, strJREUninstallStringNEW, ret, strUninstCMD
Dim tsISS, strSetupexe, qVal, strComputername, strCurrentVersion, strInstallMST
Dim searchCurVer, CurVerFound, strArrayCount, strLogPath, strInstallCMD, strInstallMSI, strInstallLog

Dim arrayJREDisplayName()
Dim arrayJREUninstallString()

'# Change this to match the version that you don't want to have it uninstall
strCurrentVersion = "Java(TM) 6 Update 13"

'# Set these to the desired log path and current version installer location
strLogPath = "[LogPath]"
strInstallMSI = "[ServerPath]\JRE1.6.0_13\jre1.6.0_13.msi"
strInstallMST = "[ServerPath]\JRE1.6.0_13\jre1.6.0_13.mst"

qVal = 0
strArrayCount = 0
ReDim arrayJREDisplayName(strArrayCount)
ReDim arrayJREUninstallString(strArrayCount)

Set wshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

strComputername = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

'# Set this to the appropriate command line settings to do a silent MSI install
strInstallLog = strLogPath & "Java_Install_" & strComputername & ".log"
strInstallCMD = "msiexec /I """ & strInstallMSI & """ /t """ & strInstallMST & """ /QN /Lime """ & strInstallLog & """"

If Not fso.FolderExists(strLogPath) Then fso.CreateFolder(strLogPath)
strLogFile = strLogPath & "Java_Uninstall_" & strComputername & ".log"
Set ts = fso.OpenTextFile(strLogFile, 8, True)

ts.WriteLine String(120, "_")
ts.WriteLine String(120, "¯")
ts.WriteLine Now() & " - Java Runtime(s) uninstallation started..."
ts.WriteLine String(120, "_") & vbCrlf

'# Generate Registry extracts from 'Uninstall' keys.
PreFlight()

'# Kill Java Processes
KillProc()

strTempDir = wshShell.ExpandEnvironmentStrings("%temp%")
strTempISS = strTempDir & "\iss"
strUnString = " -s -a /s /f1"
Set tsIn = fso.OpenTextFile(strTempDir & "\uninstall.tmp", 1)

If Not fso.FolderExists(strTempISS) Then fso.CreateFolder(strTempISS)

Do While Not tsIn.AtEndOfStream
    strUninstLine = tsIn.ReadLine
    CLSID = Mid(strUninstLine, 73, 38)
    search5 = Instr(strUninstLine, "JRE 1")
    search6 = Instr(strUninstLine, "]")
    If search5 > 0 AND search6 > 0 Then
        strJRE1 = Replace(Mid(strUninstLine, search5, search6),"]","") 
    End If

    On Error Resume Next

    strDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayName")
    strDisplayVersion = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayVersion")
    strPublisher = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\Publisher")
    strUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\UninstallString")

    strJREUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\UninstallString")
    strJREDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\DisplayName")

    On Error Goto 0

    'Search for presence of Java and Sun in DisplayName and Publisher
    search1 = Instr(1, strDisplayName, "Java", 1)
    search2 = Instr(1, strPublisher, "Sun", 1)
    search3 = Instr(1, strDisplayName, "J2SE", 1)
    search4 = Instr(1, strUninstallString, "setup.exe", 1)
    search7 = InStr(1, strDisplayName, "Development", 1) + InStr(1, strDisplayName, "Java DB", 1)

    'See if it is the current version
    searchCurVer = InStr(1, strDisplayName, strCurrentVersion, 1)

    'If it is, Show that the current version is found
    If searchCurVer > 0 Then
    CurVerFound = True

    ElseIf strJREUninstallString <> "" Then
        '# JRE 1 found
        strJREUninstallStringNEW = Replace(strJREUninstallString," -f"," -s -a /s /f")
    redim Preserve arrayJREDisplayName(strArrayCount)
    redim Preserve arrayJREUninstallString(strArrayCount)
        arrayJREDisplayName(strArrayCount) = Now() & " - Found Old JRE: " & strDisplayName & "  - Version: " & strDisplayVersion & ", Uninstalling..."
    arrayJREUninstallString(strArrayCount) = strJREUninstallStringNEW
    strArrayCount = strArrayCount + 1

    ElseIf search7 = 0 And search1 > 0 Or search3 > 0 And search2 > 0 Then
        strUninstCMD = "msiexec.exe /x " & CLSID & " /norestart /qn"

        If search4 > 0 Then
            '# Old InstallShield setup found
            Set tsISS = fso.OpenTextFile(strTempISS & "\" & CLSID & ".iss", 2, True)

            'Create Response file for any Java Version
            tsISS.WriteLine "[InstallShield Silent]"
            tsISS.WriteLine "Version=v6.00.000"
            tsISS.WriteLine "File=Response File"
            tsISS.WriteLine "[File Transfer]"
            tsISS.WriteLine "OverwrittenReadOnly=NoToAll"
            tsISS.WriteLine "[" & CLSID & "-DlgOrder]"
            tsISS.WriteLine "Dlg0=" & CLSID & "-SprintfBox-0"
            tsISS.WriteLine "Count=2"
            tsISS.WriteLine "Dlg1=" & CLSID & "-File Transfer"
            tsISS.WriteLine "[" & CLSID & "-SprintfBox-0]"
            tsISS.WriteLine "Result=1"
            tsISS.WriteLine "[Application]"
            tsISS.WriteLine "Name=Java 2 Runtime Environment, SE v1.4.0_01"
            tsISS.WriteLine "Version=1.4.0_01"
            tsISS.WriteLine "Company=JavaSoft"
            tsISS.WriteLine "Lang=0009"
            tsISS.WriteLine "[" & CLSID & "-File Transfer]"
            tsISS.WriteLine "SharedFile=YesToAll"
            tsISS.Close

            strSetupexe = Left(strUninstallString, search4 + 9)
            strUninstCMD =  strSetupexe & strUnString & Chr(34) & strTempISS & "\" & CLSID & ".iss" & Chr(34)
        End If

    redim Preserve arrayJREDisplayName(strArrayCount)
    redim Preserve arrayJREUninstallString(strArrayCount)
    arrayJREDisplayName(strArrayCount) = Now() & " - Found Old JRE: " & strDisplayName & "    - Version: " & strDisplayVersion & ", Uninstalling..."
    arrayJREUninstallString(strArrayCount) = strUninstCMD
    strArrayCount = strArrayCount + 1

    End If

Loop

tsIn.Close

Dim I
If CurVerFound AND strArrayCount > 0 Then
    ts.Writeline Now() & " - Current Version: " & strCurrentVersion & " found, continuing with uninstalls..."
    For I = LBOUND(arrayJREDisplayName) to UBOUND(arrayJREDisplayName)
        ts.WriteLine arrayJREDisplayName(I)
        ts.WriteLine Now() & " - Uninstall String sent: " & arrayJREUninstallString(I)
        ret = wshShell.Run(arrayJREUninstallString(I) , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1
    Next

ElseIf CurVerFound AND strArrayCount = 0 Then
    ts.WriteLine Now() & " - Current version, " & strCurrentVersion & ", found." 
    ts.WriteLine Now() & " - No Old Java Runtime versions are installed."
    qVal = 99

ElseIf Not CurVerFound Then

    ts.WriteLine Now() & " - Current Java version, " & strCurrentVersion & ", not found, installing it."
    ts.WriteLine Now() & " - Running Command: " & strInstallCMD
    ret = wshShell.Run(strInstallCMD , 0, True)
    If ret <> 0 AND ret<> 3010 Then
        ts.WriteLine Now() & " - Failed to Install Java, see " & strInstallLog & " for more details.  Exiting Script."
        qVal = 1
    ElseIf strArrayCount > 0 Then
        ts.WriteLine Now() & " - Successfully installed " & strCurrentVersion & ", and logged to " & strInstallLog & "."
        For I = LBOUND(arrayJREDisplayName) to UBOUND(arrayJREDisplayName)
        ts.WriteLine arrayJREDisplayName(I)
        ts.WriteLine Now() & " - Uninstall String sent: " & arrayJREUninstallString(I)
        ret = wshShell.Run(arrayJREUninstallString(I) , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1
    Next
    ElseIf strArrayCount = 0 Then
        ts.WriteLine Now() & " - Successfully installed " & strCurrentVersion & ", and logged to " & strInstallLog & "."
    ts.WriteLine Now() & " - No Old Java Runtime versions are installed."
        qVal = 99
    End If
End If

ts.WriteLine String(120, "_")
ts.WriteLine String(120, "¯")
ts.Close
fso.DeleteFolder(strTempISS)
fso.DeleteFile(strTempDir & "\uninstall.tmp")

WScript.Quit(qVal)

Sub PreFlight()
    '# Creates temp files containing extracts from registry 'Uninstall' keys.
    Dim wshShell, fso, sTemp
    Set wshShell = CreateObject("WScript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    sTemp = wshShell.ExpandEnvironmentStrings("%temp%")
    wshShell.Run "REGEDIT /E %temp%\registry.tmp HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""{"" | find /i ""}]"" > %temp%\uninstall.tmp ", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""JRE 1"" >> %temp%\uninstall.tmp ", 0, True
    If Not fso.FileExists(sTemp & "\uninstall.tmp") Then
        ts.WriteLine Now() & " - No input - %temp%\uninstall.tmp Reg extract not created."
        ts.WriteLine String(120, "_")
        ts.WriteLine String(120, "¯")
        ts.Close
        WScript.Quit(1)
    End If
End Sub

Sub KillProc()
    '# kills jusched.exe and jqs.exe if they are running.  These processes will cause the installer to fail.
    Dim wshShell
    Set wshShell = CreateObject("WScript.Shell")
    wshShell.Run "Taskkill /F /IM jusched.exe /T", 0, True
    wshShell.Run "Taskkill /F /IM jqs.exe /T", 0, True
End Sub


Answered 03/26/2009 by: ComputerX
Yellow Belt

Please log in to comment
0
I think I found what you mean: a nice simple technique Sub BugAssert (bTest, sErrMsg)  - I like it.  Simple solutions always appeal to me :o)
Answered 03/20/2009 by: VBScab
Red Belt

Please log in to comment
0

VBScab,

Fair points, well made.

bugassert ...

I think I found what you mean: a nice simple technique Sub BugAssert (bTest, sErrMsg)  - I like it.  Simple solutions always appeal to me :o)

I only found the technique via the MS forums though (searched for:  "bugassert" site:microsoft.com on google) but I like the idea.

Cheers,
Daz.

Answered 03/20/2009 by: Daz
Orange Belt

Please log in to comment
0
Error-Trapping is immensely time consuming.


your
Answered 03/20/2009 by: VBScab
Red Belt

Please log in to comment
0

Dan,

You're addition is pretty much what I would have advised anyway.  Thanks.

VBScab,

I appreciate the comments about error trapping.

Error-Trapping is immensely time consuming.  Therefore I tailor the error-trapping I do to the risk / likelyhood / probability of the errors occurring.  I used Altiris NS to push out the script.  The calling script copied the logs back to a central location, and I could see from NS if the process was attempted.  Therefore:
1: If the script failed catastrophically before logging anything, I would see the script fail from NS.
2: If any other part of the script failed, I would see from NS that the computer does not have all Java versions removed and I would see from the Log exactly what happened up to that point.
3: I use this script on Windows XP SP2 and SP3 computers only.  If any of those computers fail to create the only two objects I use here (WScript.Shell and Scripting.FileSystemObject) the computer would have far more problems than running my script.
4: I have run it on 216 computers so far remotely (extended pilot) and the script has not failed yet (no excuse though).
5: If I did not have the time constraints I had, I would not have shelled out at all in the Pre-Flight sub.  I would have retrieved the registry settings directly using the stdRegProv.  I only shelled out in this sub to retain the same format used by muaddip in his original effort.  Having said that, I completely accept your point about checking the variable contains data, under normal circumstances.
6: I also take the point about killing the process / checking it's dead.  But if the msiexec process fails to uninstall one of the versions because the process is still running, the msiexec return code will be logged in the log.

SO ... I agree completely with your critique, however I believe that the effort you put into error-trapping has to be proportionate to the chances of an error occurring undetected.  In my case (and I only wrote the script for my situation, sharing was a courtesy), it was virtually impossible for the script to fail and me not know about it.

Many thanks,
Daz.

Answered 03/20/2009 by: Daz
Orange Belt

Please log in to comment
1
ORIGINAL:  VBScab

[sigh...] ...the script - while undoubtedly pretty and effective - is, like so many I see, almost completely without error-trapping.










'# Galen Dobbs - 12:42 19/03/2009
'# Uninstalls all but the chosen version of Java Runtime.
'# Based on a script by 'Daz' from the Appdeploy.com message boards.
'# Based on a script by 'muaddip' from the Appdeploy.com message boards.
'# http://itninja.com/question/stopping-a-service09


Option Explicit

Dim wshShell, fso, strLogFile, ts, strTempDir, strTempISS, strUnString, tsIn, blFound
Dim strUninstLine, CLSID, search5, search6, search7, strJRE1, strDisplayName, strDisplayVersion
Dim strPublisher, strUninstallString, strJREUninstallString, strJREDisplayName
Dim search1, search2, search3, search4, strJREUninstallStringNEW, ret, strUninstCMD
Dim tsISS, strSetupexe, qVal, strComputername, strCurrentVersion, searchCurVer

'Change this to match the version that you don't want to have it uninstall
strCurrentVersion = "Java(TM) 6 Update 12"

qVal = 0

Set wshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

strComputername = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

If Not fso.FolderExists("C:\Logs") Then fso.CreateFolder("C:\Logs")
strLogFile = "C:\Logs\Java_Uninstall_" & strComputername & ".log"
Set ts = fso.OpenTextFile(strLogFile, 8, True)

ts.WriteLine String(80, "_")
ts.WriteLine String(80, "¯")
ts.WriteLine Now() & " - Java Runtime(s) uninstallation"
ts.WriteLine String(80, "_") & vbCrlf

'# Generate Registry extracts from 'Uninstall' keys.
PreFlight()

'# Kill Java Processes
KillProc()

strTempDir = wshShell.ExpandEnvironmentStrings("%temp%")
strTempISS = strTempDir & "\iss"
strUnString = " -s -a /s /f1"
Set tsIn = fso.OpenTextFile(strTempDir & "\uninstall.tmp", 1)

If Not fso.FolderExists(strTempISS) Then fso.CreateFolder(strTempISS)

blFound = False

Do While Not tsIn.AtEndOfStream
    strUninstLine = tsIn.ReadLine
    CLSID = Mid(strUninstLine, 73, 38)
    search5 = Instr(strUninstLine, "JRE 1")
    search6 = Instr(strUninstLine, "]")
    If search5 > 0 AND search6 > 0 Then
        strJRE1 = Replace(Mid(strUninstLine, search5, search6),"]","") 
    End If

    On Error Resume Next

    strDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayName")
    strDisplayVersion = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayVersion")
    strPublisher = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\Publisher")
    strUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\UninstallString")

    strJREUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\UninstallString")
    strJREDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\DisplayName")

    On Error Goto 0

    'Search for presence of Java and Sun in DisplayName and Publisher
    search1 = Instr(1, strDisplayName, "Java", 1)
    search2 = Instr(1, strPublisher, "Sun", 1)
    search3 = Instr(1, strDisplayName, "J2SE", 1)
    search4 = Instr(1, strUninstallString, "setup.exe", 1)
    search7 = InStr(1, strDisplayName, "Development", 1) + InStr(1, strDisplayName, "Java DB", 1)

    'Make sure it is not the current version
    searchCurVer = InStr(1, strDisplayName, strCurrentVersion, 1)

    If searchCurVer > 0 Then
    ts.WriteLine Now() & " - Current Version: " & strDisplayName & " found, leaving it alone."

    ElseIf strJREUninstallString <> "" Then
        blFound = True
        '# JRE 1 found
        strJREUninstallStringNEW = Replace(strJREUninstallString," -f"," -s -a /s /f")
        ts.WriteLine Now() & " - " & strJREDisplayName
        ts.WriteLine Now() & " - Uninstall String sent: " & strJREUninstallStringNEW
        ret = wshShell.Run(strJREUninstallStringNEW , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1

    ElseIf search7 = 0 And search1 > 0 Or search3 > 0 And search2 > 0 Then
        blFound = True
        strUninstCMD = "msiexec.exe /x " & CLSID & " /norestart /qn"

        If search4 > 0 Then
            '# Old InstallShield setup found
            Set tsISS = fso.OpenTextFile(strTempISS & "\" & CLSID & ".iss", 2, True)

            'Create Response file for any Java Version
            tsISS.WriteLine "[InstallShield Silent]"
            tsISS.WriteLine "Version=v6.00.000"
            tsISS.WriteLine "File=Response File"
            tsISS.WriteLine "[File Transfer]"
            tsISS.WriteLine "OverwrittenReadOnly=NoToAll"
            tsISS.WriteLine "[" & CLSID & "-DlgOrder]"
            tsISS.WriteLine "Dlg0=" & CLSID & "-SprintfBox-0"
            tsISS.WriteLine "Count=2"
            tsISS.WriteLine "Dlg1=" & CLSID & "-File Transfer"
            tsISS.WriteLine "[" & CLSID & "-SprintfBox-0]"
            tsISS.WriteLine "Result=1"
            tsISS.WriteLine "[Application]"
            tsISS.WriteLine "Name=Java 2 Runtime Environment, SE v1.4.0_01"
            tsISS.WriteLine "Version=1.4.0_01"
            tsISS.WriteLine "Company=JavaSoft"
            tsISS.WriteLine "Lang=0009"
            tsISS.WriteLine "[" & CLSID & "-File Transfer]"
            tsISS.WriteLine "SharedFile=YesToAll"
            tsISS.Close

            strSetupexe = Left(strUninstallString, search4 + 9)
            strUninstCMD =  strSetupexe & strUnString & Chr(34) & strTempISS & "\" & CLSID & ".iss" & Chr(34)
        End If

        ts.WriteLine Now() & " - " & strDisplayName & "    - Version: " & strDisplayVersion
        ts.WriteLine Now() & " - Uninstall String sent: " & strUninstCMD
        ret = wshShell.Run(strUninstCMD , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1
    End If

Loop

tsIn.Close

If Not blFound Then
    ts.WriteLine Now() & " - No Old Java Runtime versions found installed."
    qVal = 99
End If

ts.WriteLine String(80, "_")
ts.WriteLine String(80, "¯")
ts.Close
fso.DeleteFolder(strTempISS)
fso.DeleteFile(strTempDir & "\uninstall.tmp")

WScript.Quit(qVal)

Sub PreFlight()
    '# Creates temp files containing extracts from registry 'Uninstall' keys.
    Dim wshShell, fso, sTemp
    Set wshShell = CreateObject("WScript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    sTemp = wshShell.ExpandEnvironmentStrings("%temp%")
    wshShell.Run "REGEDIT /E %temp%\registry.tmp HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""{"" | find /i ""}]"" > %temp%\uninstall.tmp ", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""JRE 1"" >> %temp%\uninstall.tmp ", 0, True
    If Not fso.FileExists(sTemp & "\uninstall.tmp") Then
        ts.WriteLine Now() & " - No input - %temp%\uninstall.tmp Reg extract not created."
        ts.WriteLine String(80, "_")
        ts.WriteLine String(80, "¯")
        ts.Close
        WScript.Quit(1)
    End If
End Sub

Sub KillProc()
    '# kills jusched.exe and jqs.exe if they are running.  These processes will cause the installer to fail.
    Dim wshShell
    Set wshShell = CreateObject("WScript.Shell")
    wshShell.Run "Taskkill /F /IM jusched.exe /T", 0, True
    wshShell.Run "Taskkill /F /IM jqs.exe /T", 0, True
End Sub



Answered 03/19/2009 by: ComputerX
Yellow Belt

  • Are you guys doing something to make this look formatted? That is gibberish! Is there no code tag here? test

Please log in to comment
-1
Very pretty
Answered 03/19/2009 by: VBScab
Red Belt

Please log in to comment
0

Daz - You rock.  Thanks for the script.  Very pretty.

One question...  I have a install base with all manner of ancient JREs.  (I recently saw a 1.3 version.)  I am pushing the current version with a GPO, but I would like to clean up the old ones.

Your script looks ideal, but I don't know how to exclude the current version[1] of the JRE from being uninstalled.  How hard is that?

How do you use the script?

Thanks again.

Dan

[1] As of 03/18/09 it is version 6.0.120 {26A24AE4-039D-4CA4-87B4-2F83216012FF}

Answered 03/18/2009 by: ComputerX
Yellow Belt

Please log in to comment
0

In the interest of sharing, below is pasted my Sun Java uninstall all script, originally based on the one above by muaddip.  I have tightened it up a bit and it now fully logs to "C:\Logs\Java_Uninstall_%COMPUTERNAME%".  It will create C:\Logs if it does not exist.

The script does not rely on any batch files as it performs the same function from within the PreFlight() sub in the script.  It is self-contained and silent.

The script will exit with return codes:
99 if no Sun JRE versions were found to uninstall.
1 if an exit code from one the uninstalls was not 0 or 3010 (reboot required).



'# D.Collins - 16:58 18/02/2009
'# Uninstalls any and all versions of Java Runtime.
'# Based on a script by 'muaddip' from Appdeploy.com message boards.
'# http://itninja.com/question/stopping-a-service09


Option Explicit

Dim wshShell, fso, strLogFile, ts, strTempDir, strTempISS, strUnString, tsIn, blFound
Dim strUninstLine, CLSID, search5, search6, search7, strJRE1, strDisplayName, strDisplayVersion
Dim strPublisher, strUninstallString, strJREUninstallString, strJREDisplayName
Dim search1, search2, search3, search4, strJREUninstallStringNEW, ret, strUninstCMD
Dim tsISS, strSetupexe, qVal, strComputername

qVal = 0

Set wshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

strComputername = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

If Not fso.FolderExists("C:\Logs") Then fso.CreateFolder("C:\Logs")
strLogFile = "C:\Logs\Java_Uninstall_" & strComputername & ".log"
Set ts = fso.OpenTextFile(strLogFile, 8, True)

ts.WriteLine String(80, "_")
ts.WriteLine String(80, "¯")
ts.WriteLine Now() & " - Java Runtime(s) uninstallation"
ts.WriteLine String(80, "_") & vbCrlf

'# Generate Registry extracts from 'Uninstall' keys.
PreFlight()

'# Kill Java Processes
KillProc()

strTempDir = wshShell.ExpandEnvironmentStrings("%temp%")
strTempISS = strTempDir & "\iss"
strUnString = " -s -a /s /f1"
Set tsIn = fso.OpenTextFile(strTempDir & "\uninstall.tmp", 1)

If Not fso.FolderExists(strTempISS) Then fso.CreateFolder(strTempISS)

blFound = False

Do While Not tsIn.AtEndOfStream
    strUninstLine = tsIn.ReadLine
    CLSID = Mid(strUninstLine, 73, 38)
    search5 = Instr(strUninstLine, "JRE 1")
    search6 = Instr(strUninstLine, "]")
    If search5 > 0 AND search6 > 0 Then
        strJRE1 = Replace(Mid(strUninstLine, search5, search6),"]","") 
    End If

    On Error Resume Next

    strDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayName")
    strDisplayVersion = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\DisplayVersion")
    strPublisher = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\Publisher")
    strUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & CLSID & "\UninstallString")

    strJREUninstallString = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\UninstallString")
    strJREDisplayName = wshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & strJRE1 & "\DisplayName")

    On Error Goto 0

    'Search for presence of Java and Sun in DisplayName and Publisher
    search1 = Instr(1, strDisplayName, "Java", 1)
    search2 = Instr(1, strPublisher, "Sun", 1)
    search3 = Instr(1, strDisplayName, "J2SE", 1)
    search4 = Instr(1, strUninstallString, "setup.exe", 1)
    search7 = InStr(1, strDisplayName, "Development", 1) + InStr(1, strDisplayName, "Java DB", 1)

    If strJREUninstallString <> "" Then
        blFound = True
        '# JRE 1 found
        strJREUninstallStringNEW = Replace(strJREUninstallString," -f"," -s -a /s /f")
        ts.WriteLine Now() & " - " & strJREDisplayName
        ts.WriteLine Now() & " - Uninstall String sent: " & strJREUninstallStringNEW
        ret = wshShell.Run(strJREUninstallStringNEW , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1

    ElseIf search7 = 0 And search1 > 0 Or search3 > 0 And search2 > 0 Then
        blFound = True
        strUninstCMD = "msiexec.exe /x " & CLSID & " /norestart /qn"

        If search4 > 0 Then
            '# Old InstallShield setup found
            Set tsISS = fso.OpenTextFile(strTempISS & "\" & CLSID & ".iss", 2, True)

            'Create Response file for any Java Version
            tsISS.WriteLine "[InstallShield Silent]"
            tsISS.WriteLine "Version=v6.00.000"
            tsISS.WriteLine "File=Response File"
            tsISS.WriteLine "[File Transfer]"
            tsISS.WriteLine "OverwrittenReadOnly=NoToAll"
            tsISS.WriteLine "[" & CLSID & "-DlgOrder]"
            tsISS.WriteLine "Dlg0=" & CLSID & "-SprintfBox-0"
            tsISS.WriteLine "Count=2"
            tsISS.WriteLine "Dlg1=" & CLSID & "-File Transfer"
            tsISS.WriteLine "[" & CLSID & "-SprintfBox-0]"
            tsISS.WriteLine "Result=1"
            tsISS.WriteLine "[Application]"
            tsISS.WriteLine "Name=Java 2 Runtime Environment, SE v1.4.0_01"
            tsISS.WriteLine "Version=1.4.0_01"
            tsISS.WriteLine "Company=JavaSoft"
            tsISS.WriteLine "Lang=0009"
            tsISS.WriteLine "[" & CLSID & "-File Transfer]"
            tsISS.WriteLine "SharedFile=YesToAll"
            tsISS.Close

            strSetupexe = Left(strUninstallString, search4 + 9)
            strUninstCMD =  strSetupexe & strUnString & Chr(34) & strTempISS & "\" & CLSID & ".iss" & Chr(34)
        End If

        ts.WriteLine Now() & " - " & strDisplayName & "    - Version: " & strDisplayVersion
        ts.WriteLine Now() & " - Uninstall String sent: " & strUninstCMD
        ret = wshShell.Run(strUninstCMD , 0, True)
        ts.WriteLine Now() & " - Return: " & ret
        If ret <> 0 And ret <> 3010 Then qVal = 1
    End If

Loop

tsIn.Close

If Not blFound Then
    ts.WriteLine Now() & " - No Java Runtime versions found installed."
    qVal = 99
End If

ts.WriteLine String(80, "_")
ts.WriteLine String(80, "¯")
ts.Close
fso.DeleteFolder(strTempISS)
fso.DeleteFile(strTempDir & "\uninstall.tmp")

WScript.Quit(qVal)

Sub PreFlight()
    '# Creates temp files containing extracts from registry 'Uninstall' keys.
    Dim wshShell, fso, sTemp
    Set wshShell = CreateObject("WScript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    sTemp = wshShell.ExpandEnvironmentStrings("%temp%")
    wshShell.Run "REGEDIT /E %temp%\registry.tmp HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\windows\currentversion\uninstall", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""{"" | find /i ""}]"" > %temp%\uninstall.tmp ", 0, True
    wshShell.Run "cmd /c type %temp%\registry.tmp | find /i ""JRE 1"" >> %temp%\uninstall.tmp ", 0, True
    If Not fso.FileExists(sTemp & "\uninstall.tmp") Then
        ts.WriteLine Now() & " - No input - %temp%\uninstall.tmp Reg extract not created."
        ts.WriteLine String(80, "_")
        ts.WriteLine String(80, "¯")
        ts.Close
        WScript.Quit(1)
    End If
End Sub

Sub KillProc()
    '# kills jusched.exe and jqs.exe if they are running.  These processes will cause the installer to fail.
    Dim wshShell
    Set wshShell = CreateObject("WScript.Shell")
    wshShell.Run "Taskkill /F /IM jusched.exe /T", 0, True
    wshShell.Run "Taskkill /F /IM jqs.exe /T", 0, True
End Sub

Answered 03/11/2009 by: Daz
Orange Belt

  • Been a while since this was posted, just wondering if you have modified this to take into account 64-bit systems as well.  If so I would like to see or I will modify the code to do so.

  • This content is currently hidden from public view.
    Reason: Removed by user request
    For more information, visit our FAQ's.
Please log in to comment
0

I can see you posted this a year ago, but I've only just found it.  You've done all the hard work for me.  Great work, well done.

I will be using a version of your script: can you tell me if you've found any problems with it in the wild since you posted it?

Answered 12/11/2008 by: Daz
Orange Belt

  • Muadip - does this un-install remove all versions including Java 6 and Java 7 silently?

  • Muadip - I've tested your script and it worked on Win7x86 but it didn't work on Win7x64 because the Registry settings are different (Wow6432Node). I already changed it to reference this but it's still not working.

  • what would i need to change to get different versions of java development kit uninstalled using the lab deploy script?

  • Look earlier for the post related to wmic - best verstion I've been using till now

    I use something like this:

    @echo OFF
    cls
    TITLE Automated workaround by Cuciu

    :KillIE&JavaProcesses
    echo *** This will kill Browsers and Java Processes ***
    Rem ***
    taskkill /F /IM iexplorer.exe
    taskkill /F /IM iexplore.exe
    taskkill /F /IM firefox.exe
    taskkill /F /IM chrome.exe
    taskkill /F /IM jusched.exe
    taskkill /F /IM jp2launcher.exe
    taskkill /F /IM java.exe
    taskkill /F /IM javaw.exe
    taskkill /F /IM jqs.exe

    :UninstallingOldJREVersions
    echo.************************************************************************
    echo.************************************************************************
    echo.              DO NOT CLOSE THIS WINDOW
    echo. All the Java versions from your computer are being removed.
    echo.************************************************************************
    echo.************************************************************************
    wmic product where "name like 'Java(TM) 6%%'" call uninstall
    wmic product where "name like 'Java 7%%'" call uninstall

    goto END

    :END

    Works both on XP and Winds 7
    The trick on Windows 7 is to run it as Administrator (or to run wmic in Administrator Command Prompt -- wherever comes first)

Please log in to comment
Answer this question or Comment on this question for clarity