Пакетний файл для видалення всіх версій Sun Java?


11

Я налаштовую систему, щоб підтримувати Java в нашому офісі. У всіх є різні версії Java, багато з них старі та незахищені, а деякі - на 1.4. У мене є сервер System Center Essentials, який може витісняти і безшумно запускати .msi-файл, і я вже перевіряв, що він може встановити останню Java. Але старі версії (наприклад, 1.4) інсталятор не видаляє, тому мені потрібно видалити їх. Усі працюють під керуванням Windows XP.

Акуратний збіг обставин полягає в тому, що Sun, щойно придбаний Oracle, а Oracle тепер змінив усі випадки "Sun" на "Oracle" на Java. Отже, я можу зручно не турбуватися про видалення останньої Java, тому що я можу просто здійснити пошук та видалити всі програми Sun Java.

Я знайшов наступний пакетний сценарій на форумі, який виглядав перспективно:

@echo off & cls
Rem List all Installation subkeys from uninstall key.
echo Searching Registry for Java Installs
for /f %%I in ('reg query HKLM\SOFTWARE\microsoft\windows\currentversion\uninstall') do echo %%I | find "{" > nul && call :All-Installations %%I
echo Search Complete..
goto :EOF
:All-Installations
Rem Filter out all but the Sun Installations
for /f "tokens=2*" %%T in ('reg query %1 /v Publisher 2^> nul') do echo %%U | find "Sun" > nul && call :Sun-Installations %1
goto :EOF
:Sun-Installations
Rem Filter out all but the Sun-Java Installations. Note the tilda + n, which drops all the subkeys from the path
for /f "tokens=2*" %%T in ('reg query %1 /v DisplayName 2^> nul') do echo . Uninstalling - %%U: | find "Java" && call :Sun-Java-Installs %~n1
goto :EOF
:Sun-Java-Installs
Rem Run Uninstaller for the installation
MsiExec.exe /x%1 /qb
echo . Uninstall Complete, Resuming Search..
goto :EOF

Однак, коли я запускаю сценарій, я отримую такий результат:

Searching Registry for Java Installs
'DEV_24x6' is not recognized as an internal or external command,
operable program or batch file.
'SUBSYS_542214F1' is not recognized as an internal or external command,
operable program or batch file.

А потім, здається, висить, і я ctrl-c, щоб зупинити це.

Читаючи сценарій, я не все розумію, але не знаю, чому він намагається запускати фрагменти ключів реєстру як програми. Що не так із пакетним сценарієм? Як я можу це виправити, щоб я міг перейти до того, щоб якось перетворити його на MSI та розгорнути його для всіх, щоб почистити цей офіс?

Або ж ви можете запропонувати краще рішення чи існуючий файл MSI зробити те, що мені потрібно? Я просто хочу переконатись, що всі старі версії Java знімаються з комп'ютерів кожного, оскільки я чув про подвиги, які спричиняють завантаження веб-сторінок за допомогою старих версій Java, і я хочу їх уникати.


з цікавості, чому ти хочеш це робити. Незмінність версії Java не заподіювала мені болю (HP я дивлюся на тебе). Якщо б я щось спокусився написати сценарій для встановлення декількох версій Java
Jim B

3
Безпека буде головною проблемою. Застарілі версії JVM були дуже популярні в останніх атаках. Навіть машини Windows 7 зазнали впливу.
Джошуа

1
Зовсім для безпеки. Я впродовж останніх кількох годин успішно розгорнув останню Java в офісі, але ті старіші версії все ще залишаються. Я чув про подвиги, які змогли використовувати старішу версію Java, яка була встановлена, але в режимі спокою, щоб встановити шпигунське програмне забезпечення, і я хочу уникнути будь-якого цього, ТОЛЬКО маючи найновішу Java на комп’ютерах.
Ricket

Ось ще один підхід, який я щойно знайшов: ivan.dretvic.com/2011/02/…
Крейг Рінгер

Відповіді:


6

Далі, що ми використовуємо, чудово працює як сценарій запуску:

on error resume next

dim WshShell
dim RegKey
dim ScriptVerKey

Set WshShell = CreateObject("WScript.Shell")

'checks to see if registry key exists, if it does, the cleanup runs.
RegKey = "HKLM\SOFTWARE\EDU\Cleanup\"
ScriptVerKey = WshShell.RegRead(RegKey & "JAVAOldVer")

if ScriptVerKey <> "1" Then 
  Cleanup()
 Else 
  WScript.Quit
End If

Sub Cleanup()

' Uninstall Java 1.4.1.01
WshShell.Run "msiexec /x {1666FA7C-CB5F-11D6-A78C-00B0D079AF64} /q",1,True
' Uninstall Java 1.4.2.04
WshShell.Run "msiexec /x {7148F0A8-6813-11D6-A77B-00B0D0142040} /q",1,True
' Uninstall Java 5.0.2
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150020} /q",1,True
' Uninstall Java 5.0.4
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150040} /q",1,True
' Uninstall Java 5.0.5
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150050} /q",1,True
' Uninstall Java 5.0.6
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150060} /q",1,True
' Uninstall Java 5.0.7
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150070} /q",1,True
' Uninstall Java 5.0.10
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150100} /q",1,True
' Uninstall Java 5.0.11
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150110} /q",1,True
' Uninstall Java 5.0.12
'WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150120} /q",1,True
' Uninstall Java 6.0.0
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160000} /q",1,True
' Uninstall Java 6.0.1
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160010} /q",1,True
' Uninstall Java 6.0.2
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160020} /q",1,True
' Uninstall Java 6.0.5
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160050} /q",1,True
' Uninstall Java 6.0.30 (020608)
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160030} /q",1,True


'regkey below stops the script from running again
WshShell.RegWrite "HKLM\Software\EDU\", "Default"
WshShell.RegWrite "HKLM\Software\EDU\Cleanup\", "Default"
WshShell.RegWrite "HKLM\Software\EDU\Cleanup\JAVAOldVer", 1, "REG_SZ"

End Sub

Це чудово! Я ще не очистив старі версії Java, тому думаю, що я інтегрую це в наш сценарій запуску. Дякую, що поділились!
Ricket

8

Цей рядок видалить усі версії JAVA:

wmic продукт, де "ім'я типу" Java %% %% "" викликати видалення / неінтерактивний


Дякую. Це добре працює в моїй системі. За допомогою цієї команди було видалено як мою Java 7, так і обидві мої версії Java 8.
Майкл С.

Спасибі! Це найкраще cmd для видалення всіх старих версій Java. Просто потрібно переконатися, що він працює з правами адміністратора.
PatricK

1

Витяг з: http://www.java.com/en/download/faq/remove_olderversions.xml

З часом, можливо, ви встановили кілька версій Java для запуску доступного вмісту Java. Раніше кожне оновлення Java встановлювалося в окремих каталогах вашої системи. Однак оновлення Java зараз встановлені в одному каталозі.

Чи слід видалити старіші версії Java? Ми настійно рекомендуємо користувачам видалити всі старіші версії Java зі своєї системи. Зберігання старих та непідтримуваних версій Java у вашій системі представляє серйозний ризик для безпеки. Видалення старих версій Java із вашої системи гарантує, що програми Java запускатимуться із найсучаснішими поліпшеннями безпеки та продуктивності у вашій системі.

Я знайшов наступний VBScript, який теоретично належним чином видаляє попередні версії Java. Найкраще читати знизу вгору , оскільки інші допрацювали це до досконалості:

http://www.appdeploy.com/messageboards/tm.asp?m=29809


"Найкраще читати знизу вгору" - у такому випадку ви повинні скопіювати тут найкращий сценарій
jcollum

1

Перевірте цю просту, але дуже корисну команду:

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

вкрадено звідси


0

Там якісь - то VBScript код тут , що ви повинні бути в змозі розгорнути з допомогою групової політики без MSI.


0

У голосованій верифікованій відповіді є деякі проблеми. На основі моїх тестувань CLSID серії 6.0 невірні.

Ось CLSID, які я виявив, що працюють для кожної серії JRE. Замініть xx на потрібні версії, які ви хочете видалити. Будь ласка, використовуйте з /server//a/187552/172014

4.2_xx
{7148F0A8-6813-11D6-A77B-00B0D0142xx0}

5.0_xx
{3248F0A8-6813-11D6-A77B-00B0D0150xx0}

6.0_xx
{26A24AE4-039D-4CA4-87B4-2F832160xxF0}

7.0_xx
{26A24AE4-039D-4CA4-87B4-2F832170xxF0}

Я рекомендую також додати / norestart після / q, лише на випадок, якщо версії JRE MSI 1.4.2 хочуть перезавантажити.

msiexec /x <insert_CLSID_here> /q /norestart

0

Ви все ще можете досягти, використовуючи пакетний сценарій. Я використовую такий сценарій;

@ECHO OFF
REM #######################################################
REM AUTHOR: HeyVooN
REM BLOG: http://blog.teksoporte.es
REM DATE CREATED: 09/04/2015
REM Deploy Java to your Enterprise
REM This script is optimised for 32 and 64 Bit versions of Java to be installed on either 32 or 64 bit
REM operating systems. It can easily accommodate 64 bit versions of Java.
REM This script removes all previous versions of Java installed prior to (re)install any version.
REM #######################################################

REM #######################################################
REM SECTION 1 - CLEAN UP PC BEFORE INSTALLING JAVA (This section is not mandatory)
REM #######################################################
ECHO -------------------------------------------------------
ECHO STOP PROCESSES
ECHO -------------------------------------------------------
REM Assuming that processes using Java are stopped before uninstalling existing versions of Java
REM Common processes using Java: firefox.exe, iexplore.exe, chrome.exe, jusched.exe, jucheck.exe, java.exe, javacpl.exe

sc config "UI0Detect" start= disabled
sc stop UI0Detect
taskkill /F /IM jusched.exe /T
taskkill /F /IM jucheck.exe /T
taskkill /F /IM java.exe /T

ECHO -------------------------------------------------------
ECHO UNISTALL ANY PREVIOUS VERSIONS OF JAVA 32 Bit
ECHO -------------------------------------------------------
SET jver="Java 7"
SET regVar32=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
SET myCMD=REG QUERY %regVar32% /s /f %jver%
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO (
 ECHO Uninstall Key: {%%i}
 ECHO Condition: %uinstallState%
 START /WAIT MSIEXEC /x {%%i} /qn /norestart
  )

ECHO -------------------------------------------------------
ECHO UNISTALL ANY PREVIOUS VERSIONS OF JAVA 64 Bit
ECHO -------------------------------------------------------
SET jver="Java 7"
SET regVar64=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
SET myCMD=REG QUERY %regVar64% /s /f %jver%
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO (
 ECHO Uninstall Key: {%%i}
 ECHO Condition: %uinstallState%
 START /WAIT MSIEXEC /x {%%i} /qn /norestart
  )

ECHO -------------------------------------------------------
ECHO CLEANING REGISTRY
ECHO -------------------------------------------------------
REM Removing known problem registry keys. I use the below line to SET the variable of which reg.exe to use depending on OS architecture.
REM Additional registry removal strings can be added here.
@If Defined ProgramFiles(x86) (SET "Reg32Path=%SystemRoot%\SysWOW64\reg.exe") Else (SET "Reg32Path=%SystemRoot%\System32\reg.exe")
REM %Reg32Path% DELETE HKLM\SOFTWARE\JavaSoft /va /f
%Reg32Path% DELETE "HKLM\SOFTWARE\JavaSoft\Auto Update" /va /f
%Reg32Path% DELETE "HKLM\SOFTWARE\JavaSoft\Java Update" /va /f

ECHO -------------------------------------------------------
ECHO DELETE START MENU ITEMS
ECHO -------------------------------------------------------
RD /s /q "%ProgramData%\Microsoft\Windows\Start Menu\Programs\Java"
PAUSE
EXIT /B 0

Ви можете адаптувати / модифікувати так, як ви хочете, щоб відповідати вашим потребам. ;-)


Якщо ви системний адміністратор, не запускайте це без попередження. Примусове вбивство Java в усьому світі збирає засмутити деяких людей - наприклад, я використовую Eclipse щодня, а деякі люди використовують OpenOffice / LibreOffice. Я згадую це лише тому, що моє запитання (п’ять років тому) шукало способу мовчки розгорнути сценарій, який би запускався на комп’ютері кожного та видаляв старі версії Java. Так очевидно, що це не буде добре, або я хоч би прибрав рядки завдання вбивання.
Ricket

0

Це працювало для мене. Він видаляє всі версії Java (32-розрядні та 64-бітні) до останньої версії (яка на момент написання версії v8.0.66).

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.