Tüm Sun Java sürümlerini kaldırmak için toplu iş dosyası?


11

Java'yı ofisimizde güncel tutmak için bir sistem kuruyorum. Herkes Java'nın farklı sürümlerine sahiptir, birçoğu eski ve güvensizdir ve bazıları 1.4'e kadar uzanmaktadır. Dışarı itip sessizce bir .msi dosyasını çalıştırabilen bir System Center Essentials sunucum var ve zaten en son Java'yı yükleyebildiğini test ettim. Ancak eski sürümler (1.4 gibi) yükleyici tarafından kaldırılmaz, bu yüzden kaldırmam gerekir. Herkes Windows XP çalıştırıyor.

Temiz tesadüf, Sun'ın Oracle tarafından yeni satın alınması ve Oracle'ın artık "Sun" ın tüm örneklerini Java'daki "Oracle" olarak değiştirmesidir. Bu nedenle, en son Java'yı kaldırma konusunda endişelenmem gerekmiyor, çünkü sadece bir arama yapabilir ve tüm Sun Java programlarını kaldırabilirim .

Ben umut verici görünüyordu bir forum sonrası aşağıdaki toplu komut bulundu :

@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

Ancak, komut dosyasını çalıştırdığımda, aşağıdaki çıktıyı alıyorum:

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.

Ve sonra asmak gibi görünüyor ve ben durdurmak için ctrl-c.

Senaryoyu okurken, her şeyi anlamıyorum, ama neden program olarak kayıt defteri anahtarlarının parçalarını çalıştırmaya çalıştığını bilmiyorum. Toplu komut dosyasında sorun nedir? Nasıl düzeltebilirim, böylece bir şekilde MSI'ya dönüştürüp bu ofisi temizlemek için herkese dağıtabilirim?

Ya da alternatif olarak, ihtiyacım olanı yapmak için daha iyi bir çözüm veya mevcut bir MSI dosyası önerebilir misiniz? Web sayfalarının Java'nın eski sürümlerini kullanarak yüklenmesine neden olan istismarları duyduğumdan ve bunlardan kaçınmak istediğimden, Java'nın tüm eski sürümlerini herkesin bilgisayarlarından çıkardığınızdan emin olmak istiyorum.


merak neden bunu yapmak istiyorsun. Java sürümü uyumsuzluğu bana acı vermiyor (HP sana bakıyorum). Herhangi bir şey varsa Java'nın birden çok sürümünü yüklemek için bir komut dosyası yazmak için cazip olurum
Jim B

3
Güvenlik öncelikli kaygı olacaktır. JVM'nin eski sürümleri son saldırılarda çok popüler bir şekilde kullanılmıştır. Windows 7 makineleri bile etkilendi.
Joshua

1
Kesinlikle güvenlik için. Son birkaç saat içinde en son Java'yı ofis genelinde başarıyla dağıttım, ancak bu eski sürümler hala kalıyor. Casus yazılım yüklemek için yüklenmiş ancak bir makinede uykuda olan eski bir Java sürümünü kullanabilen istismarları duydum ve SADECE bilgisayarlarda en son Java'yı kullanarak bunlardan herhangi birini önlemek istiyorum.
Ricket

İşte yeni bulduğum başka bir yaklaşım: ivan.dretvic.com/2011/02/…
Craig Ringer

Yanıtlar:


6

Kullandığımız şey şu, bir başlangıç ​​komut dosyası olarak harika çalışıyor:

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

Bu harika! Eski Java sürümlerini henüz temizlemedim, bu yüzden bunu başlangıç ​​komut dosyamıza entegre edeceğimi düşünüyorum. Paylaşım için teşekkürler!
Ricket

8

Bu satır JAVA'nın tüm sürümlerini kaldıracak:

"'%% Java %%'" gibi ad kaldır / nointeractive olarak adlandırılan wmic ürünü


Teşekkür ederim. Bu benim sistemimde iyi çalışıyor. Bu tek komutla hem Java 7'mi hem de Java 8 sürümlerimi kaldırdı.
Michael

Teşekkürler! Bu, tüm eski java sürümlerini kaldırmak için en iyi cmd'dir. Sadece Yönetici ayrıcalıklarıyla çalıştır olduğundan emin olun.
PatricK

1

Alıntı: http://www.java.com/tr/download/faq/remove_olderversions.xml

Zamanla, kullanılabilir Java içeriğini çalıştırmak için birden çok Java sürümü yüklemiş olabilirsiniz. Geçmişte, her Java güncellemesi sisteminizde ayrı dizinlere kuruluyordu. Ancak, Java güncelleştirmeleri artık tek bir dizine yüklenir.

Java'nın eski sürümlerini kaldırmalı mıyım? Kullanıcıların Java'nın tüm eski sürümlerini sisteminizden kaldırmasını önemle öneririz. Eski ve desteklenmeyen Java sürümlerini sisteminizde tutmak ciddi bir güvenlik riski oluşturur. Eski Java sürümlerini sisteminizden kaldırmak, Java uygulamalarının sisteminizdeki en güncel güvenlik ve performans geliştirmeleriyle çalışmasını sağlar.

Teoride, Java'nın önceki sürümlerini düzgün bir şekilde kaldıran aşağıdaki VBScript'i buldum. Aşağıdan yukarıya okumak en iyisi , çünkü diğerleri onu mükemmelliğe ayarladı:

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


"Aşağıdan yukarıya okumak için en iyisi" - bu durumda en iyi senaryoyu buraya kopyalamalısınız
jcollum

1

Bu basit ama çok kullanışlı komutu kontrol edin:

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

buradan çalındı


0

Burada , msi olmadan Grup İlkesi aracılığıyla dağıtabilmeniz gereken bazı vbscript kodları vardır .


0

En çok oylanan doğrulanmış cevabın bazı sorunları var. 6.0 serisi CLSID değerleri testlerime göre yanlış.

İşte her JRE serisi için çalıştığımı bulduğum CLSID'ler. Kaldırmak istediğiniz sürümler için xx değerini değiştirin. Lütfen https://serverfault.com/a/187552/172014 ile kullanın

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}

1.4.2 serisi JRE MSI'ların yeniden başlatılmasını istemeleri durumunda / q'dan sonra / norestart eklemenizi öneririm.

msiexec /x <insert_CLSID_here> /q /norestart

0

Toplu iş komut dosyasını kullanarak da yine yapabilirsiniz. Aşağıdaki komut dosyasını kullanıyorum;

@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

İhtiyaçlarınıza uygun şekilde uyarlayabilir / değiştirebilirsiniz. ;-)


Sistem yöneticisiyseniz, bunu uyarı yapmadan çalıştırmayın. Sistem genelinde zorla öldüren Java bazı insanları rahatsız edecek - örneğin her gün Eclipse kullanıyorum ve bazı insanlar OpenOffice / LibreOffice kullanıyor. Sadece bundan bahsediyorum çünkü sorum (beş yıl önce), herkesin bilgisayarında çalışan ve Java'nın eski sürümlerini kaldıracak bir komut dosyasını sessizce dağıtmanın bir yolunu arıyordu. Açıkçası bu iyi olmaz, ya da en azından taskkill çizgilerini kaldırırdım.
Ricket

0

Bu benim için çalıştı. En son sürümden önce (yazma sırasında v8.0.66 olan) tüm Java sürümlerini (32 bit ve 64 bit) kaldırır.

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.