Batch file để gỡ cài đặt tất cả các phiên bản Sun Java?


11

Tôi đang thiết lập một hệ thống để cập nhật Java trong văn phòng của chúng tôi. Mọi người đều có tất cả các phiên bản Java khác nhau, nhiều phiên bản cũ và không an toàn, và một số có niên đại lên tới 1.4. Tôi có một máy chủ System Center Essentials có thể đẩy ra và âm thầm chạy tệp .msi và tôi đã kiểm tra xem nó có thể cài đặt Java mới nhất không. Nhưng các phiên bản cũ (chẳng hạn như 1.4) không bị xóa bởi trình cài đặt, vì vậy tôi cần gỡ cài đặt chúng. Mọi người đều đang chạy Windows XP.

Sự trùng hợp ngẫu nhiên là Sun vừa được Oracle mua và Oracle đã thay đổi tất cả các thể hiện của "Sun" thành "Oracle" trong Java. Vì vậy, tôi có thể thuận tiện không phải lo lắng về việc gỡ cài đặt Java mới nhất, bởi vì tôi chỉ có thể thực hiện tìm kiếm và gỡ cài đặt tất cả các chương trình Sun Java.

Tôi tìm thấy tập lệnh bó sau đây trên một bài đăng diễn đàn có vẻ đầy hứa hẹn:

@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

Tuy nhiên, khi tôi chạy tập lệnh, tôi nhận được kết quả sau:

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.

Và sau đó nó xuất hiện để treo và tôi ctrl-c để ngăn chặn nó.

Đọc qua kịch bản, tôi không hiểu tất cả mọi thứ, nhưng tôi không biết tại sao nó lại cố chạy các mẩu khóa đăng ký như các chương trình. Điều gì là sai với tập lệnh bó? Làm cách nào tôi có thể sửa nó, để tôi có thể chuyển sang một cách nào đó biến nó thành MSI và triển khai nó cho mọi người để dọn dẹp văn phòng này?

Hoặc cách khác, bạn có thể đề xuất một giải pháp tốt hơn hoặc tệp MSI hiện có để làm những gì tôi cần không? Tôi chỉ muốn đảm bảo loại bỏ tất cả các phiên bản Java cũ khỏi máy tính của mọi người, vì tôi đã nghe nói về việc khai thác khiến các trang web tải bằng các phiên bản Java cũ và tôi muốn tránh những phiên bản đó.


Vì tò mò tại sao bạn muốn làm điều này. Không tương thích phiên bản Java đã khiến tôi không hết đau (HP tôi đang nhìn bạn). Nếu có bất cứ điều gì tôi muốn viết một tập lệnh để cài đặt nhiều phiên bản Java
Jim B

3
An ninh sẽ là mối quan tâm chính. Các phiên bản lỗi thời của JVM đã được khai thác rất phổ biến trong các cuộc tấn công gần đây. Ngay cả máy Windows 7 cũng bị ảnh hưởng.
Joshua

1
Tuyệt đối vì an ninh. Tôi đã triển khai thành công Java mới nhất trong vài giờ qua, nhưng những phiên bản cũ hơn vẫn còn. Tôi đã nghe nói về các khai thác có thể sử dụng phiên bản Java cũ hơn đã được cài đặt nhưng không hoạt động trong máy, để cài đặt phần mềm gián điệp và tôi muốn tránh bất kỳ phiên bản nào bằng cách CHỈ có Java mới nhất trên máy tính.
Ricket

Đây là một cách tiếp cận khác mà tôi vừa tìm thấy: ivan.dretvic.com/2011/02/ Khăn
Craig Ringer

Câu trả lời:


6

Sau đây là những gì chúng tôi sử dụng, hoạt động tuyệt vời như một kịch bản khởi động:

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

Thật tuyệt! Tôi vẫn chưa dọn sạch các phiên bản Java cũ vì vậy tôi nghĩ rằng tôi sẽ tích hợp nó vào tập lệnh khởi động của chúng tôi. Cám ơn vì đã chia sẻ!
Ricket

8

Dòng này sẽ gỡ cài đặt tất cả các phiên bản của JAVA:

sản phẩm wmic trong đó "tên như 'Java %%%%'" gỡ cài đặt cuộc gọi / không hoạt động


Cảm ơn bạn. Điều này hoạt động tốt trên hệ thống của tôi. Nó đã loại bỏ cả Java 7 của tôi cũng như cả hai phiên bản Java 8 của tôi bằng lệnh đơn này.
Michael S.

Cảm ơn! Đây là cmd tốt nhất để loại bỏ tất cả các phiên bản java cũ. Chỉ cần đảm bảo đó là Chạy với đặc quyền Quản trị viên.
PatricK

1

Trích từ: http://www.java.com/en/doad/faq/remove_olderversions.xml

Theo thời gian, bạn có thể đã cài đặt nhiều phiên bản Java để chạy nội dung Java có sẵn. Trước đây, mỗi bản cập nhật Java đã được cài đặt trong các thư mục riêng trên hệ thống của bạn. Tuy nhiên, các bản cập nhật Java hiện được cài đặt trong một thư mục.

Tôi có nên xóa các phiên bản cũ hơn của Java không? Chúng tôi khuyên người dùng nên xóa tất cả các phiên bản Java cũ hơn khỏi hệ thống của bạn. Giữ các phiên bản Java cũ và không được hỗ trợ trên hệ thống của bạn có rủi ro bảo mật nghiêm trọng. Việc xóa các phiên bản Java cũ hơn khỏi hệ thống của bạn đảm bảo rằng các ứng dụng Java sẽ chạy với các cải tiến hiệu suất và bảo mật cập nhật nhất trên hệ thống của bạn.

Tôi đã tìm thấy VBScript sau đây, theo lý thuyết, loại bỏ đúng các phiên bản trước của Java. Tốt nhất để đọc từ dưới lên , vì những người khác đã điều chỉnh nó thành hoàn hảo:

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


"Tốt nhất để đọc từ dưới lên" - trong trường hợp đó bạn nên sao chép kịch bản tốt nhất vào đây
jcollum

1

Kiểm tra lệnh đơn giản nhưng rất hữu ích này:

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

bị đánh cắp từ đây


0

Có một số mã vbscript ở đây mà bạn sẽ có thể triển khai thông qua Chính sách nhóm mà không cần msi.


0

Câu trả lời xác minh hàng đầu có một số vấn đề với nó. CLSID sê-ri 6.0 không chính xác dựa trên thử nghiệm của tôi.

Dưới đây là các CLSID mà tôi đã tìm thấy để hoạt động cho từng loạt JRE. Thay thế xx cho các phiên bản bạn muốn xóa. Vui lòng sử dụng với /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}

Tôi khuyên bạn nên thêm / norestart sau / q cũng như trong trường hợp MSI loạt 1.4.2 muốn khởi động lại.

msiexec /x <insert_CLSID_here> /q /norestart

0

Bạn vẫn có thể thực hiện bằng cách sử dụng tập lệnh Batch. Tôi sử dụng kịch bản sau đây;

@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

Bạn có thể điều chỉnh / sửa đổi cách bạn muốn phù hợp với nhu cầu của bạn. ;-)


Nếu bạn là quản trị viên hệ thống, đừng chạy nó mà không có cảnh báo. Bắt buộc toàn hệ thống Java sẽ khiến một số người khó chịu - ví dụ tôi sử dụng Eclipse mỗi ngày và một số người sử dụng OpenOffice / LibreOffice. Tôi chỉ đề cập đến vấn đề này bởi vì câu hỏi của tôi (năm năm trước) là tôi đang tìm cách để âm thầm triển khai một tập lệnh chạy trên máy tính của mọi người và gỡ cài đặt các phiên bản Java cũ. Vì vậy, rõ ràng điều này sẽ không làm tốt, hoặc tôi sẽ loại bỏ các dòng nhiệm vụ ít nhất.
Ricket

0

Điều này làm việc cho tôi. Nó gỡ cài đặt tất cả các phiên bản Java (32 bit và 64 bit) trước phiên bản mới nhất (v8.0.66 tại thời điểm viết).

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.