Войти

Показать полную графическую версию : [решено] Батник для удаления старых версий Java и установки новой


arman29
18-12-2014, 08:07
Добрый день!

Ситуация: используется Java и в основном хаотично установлены разные версии на разных компах, на некоторых установлены сразу несколько одновременно, например 7.0.45 и 7.0.60

Помогите, пожалуйста, исправить батник, который проверял бы установлена ли старая версия, удалял бы ее и ставил бы новую взависимости от архитектуры системы. Написал свой, но каждый раз он выдает окно "This action is only valid for products that are currently installed", т.е. если не находит, что в системе была установлена определенная версия программы. А мне как-то хочется без всяких там всплывающих окон проверить/удалить старые версии Java и поставить новую

ECHO OFF
rem Checking if Java x86 v7.0.450 is installed
:32UNINST745
IF EXIST "C:\Program Files\Java" (
MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F83217045FF} /qb
) ELSE (
goto 64UNINST745
)

ECHO OFF
rem Checking if Java x64 v7.0.450 is installed
:64UNINST745
IF EXIST "C:\Program Files\Java" (
MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F83217045FF} /qb
) ELSE (
goto :32UNINST706
)

ECHO OFF
rem Checking if Java x86 v7.0.60 is installed
:32UNINST706
IF EXIST "C:\Program Files\Java" (
MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F83217006FF} /qb
) ELSE (
goto 64UNINST706
)

ECHO OFF
rem Checking if Java x64 v7.0.60 is installed
:64UNINST706
IF EXIST "C:\Program Files\Java" (
MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F86417006FF} /qb
) ELSE (
goto 32UNINST800
)

rem Checking if Java x86 v8.00 is installed
:32UNINST800
IF EXIST "C:\Program Files\Java" (
MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F83218000FF} /qb
) ELSE (
goto 64UNINST800
)

rem Checking if Java x64 v8.00 is installed
:64UNINST800
IF EXIST "C:\Program Files (x86)\Java" (
MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F86418000FF} /qb
) ELSE (
goto 3264INST825
)

rem Installing Java x86/x64 v8.25
:3264INST825
IF EXIST "C:\Program Files (x86)" (
start /wait .\jre-8u25-windows-x64.exe /s
) ELSE (
start /wait .\jre-8u25-windows-x86.exe /s
)
EXIT

Iska
18-12-2014, 08:25
Выложите вывод:
wmic.exe Product
строки с Java для каждой из версий.

arman29
18-12-2014, 08:40
спасибо большое, но, если честно, не работал с командой "wmic.exe", боюсь ошибиться. Правильно ли так будет:

ECHO OFF
rem Checking if Java x86 v7.0.450 is installed
:32UNINST745
IF EXIST "C:\Program Files\Java" (
wmic.exe /X{26A24AE4-039D-4CA4-87B4-2F83217045FF} /qb
) ELSE (
goto 64UNINST745
)

ECHO OFF
rem Checking if Java x64 v7.0.450 is installed
:64UNINST745
IF EXIST "C:\Program Files\Java" (
wmic.exe /X{26A24AE4-039D-4CA4-87B4-2F83217045FF} /qb
) ELSE (
goto :32UNINST706
)

Iska
18-12-2014, 09:12
Неправильно. Сделайте ровно то, о чём я прошу.

Откройте командную строку, наберите:
wmic.exe Product >"c:\Out.txt"
нажмите «Enter». После того, как вновь появится приглашение командной строки, откройте текстовый файл «c:\Out.txt» в Блокноте, найдите строку/строки, относящиеся к Java, и скопируйте её/их сюда. Не весь файл, а только строки, относящиеся к Java. Проделайте это для каждой версии Java.

У меня нет ни одной версии Java, и я не планирую их устанавливать. Посему мне понадобится получить потребные данные от Вас. После этого я, возможно, смогу сделать потребное Вам, проанализировав полученные строки.

arman29
18-12-2014, 11:52
Iska,

спасибо, что отозвались и пришли на помощь. Решение уже нашел - http://itme.info/install-java-with-remove-old-products/

Изменил код под себя и все работает:
@ECHO OFF

REM Killing all processes and services
net stop JavaQuickStarterService
taskkill /F /IM iexplore.exe /T
taskkill /F /IM jqs.exe /T
taskkill /F /IM jucheck.exe /T
taskkill /F /IM javaw.exe /T

REM ============ Java Deletion ============
REM Сохранение в файл идентификаторов (GUID) установленных пакетов Java в формате установщика Windows Installer
SET Query=name like 'Java 7%%' OR name like 'Java(TM) 6%%' OR name like 'J2SE Runtime Environment%%' OR name like 'Java 2 Runtime Environment%%' OR name like 'Java Auto Updater%%'
wmic product where "%Query%" get IdentifyingNumber > "%TEMP%\delJava_1.txt"

REM Сохранение только GUID пакетов во второй файл
TYPE "%TEMP%\delJava_1.txt" | FINDSTR {........-....-....-....-............} > "%TEMP%\delJava_2.txt"

REM Цикл удаления пакетов
FOR /f "tokens=*" %%a IN (%TEMP%\delJava_2.txt) DO (msiexec /x %%a /qn /norestart)

REM Удаление временных файлов
IF EXIST "%TEMP%\delJava_1.txt" DEL "%TEMP%\delJava_1.txt"
IF EXIST "%TEMP%\delJava_2.txt" DEL "%TEMP%\delJava_2.txt"

rem Installing Java x86/x64 v8.25
IF EXIST "C:\Program Files (x86)" (
start /wait .\jre-8u25-windows-x64.exe /s /norestart
) ELSE (
start /wait .\jre-8u25-windows-x86.exe /s /norestart
)
EXIT

Anton04
22-12-2014, 23:26
arman29,

А чем не устраивает простая команда:

wmic.exe Product where "Name LIKE 'Java%%'" call Uninstall

;)

Iska
22-12-2014, 23:55
Anton04, а как быть с «Name», которое «J2SE Runtime Environment»? И к тому же, данный вариант удалит все версии, в том числе, и последнюю — не так ли?

Anton04
23-12-2014, 16:48
а как быть с «Name», которое «J2SE Runtime Environment»? »

а что мешает написать ещё одну команду с любым другим именем!? ;)

И к тому же, данный вариант удалит все версии, в том числе, и последнюю — не так ли? »

Несомненно. Но ничто не мешает не определять версию, а банально удалить все версии и поставить нужную. Удобство этого зависит от сценария применения, поэтому не настаиваю, а предлагаю как один из вариантов которым пользуюсь и сам.

arman29
23-12-2014, 17:51
Несомненно. Но ничто не мешает не определять версию, а банально удалить все версии и поставить нужную. Удобство этого зависит от сценария применения, поэтому не настаиваю, а предлагаю как один из вариантов которым пользуюсь и сам. »

а свою версию можете выложить, пожалуйста?

Iska
23-12-2014, 18:36
а что мешает написать ещё одну команду с любым другим именем!? »
И чем это будет отличаться от вышеприведённого:
…name like 'Java 7%%' OR name like 'Java(TM) 6%%' OR name like 'J2SE Runtime Environment%%' OR name like 'Java 2 Runtime Environment%%' OR name like 'Java Auto Updater%%'
кроме того, что краем может задеть лишнего?!

Но ничто не мешает не определять версию, а банально удалить все версии и поставить нужную. »
Мешает. Нет никакой нужды удалять и затем устанавливать одну и ту же версию.

Удобство этого зависит от сценария применения, поэтому не настаиваю, а предлагаю как один из вариантов которым пользуюсь и сам. »
Сценарий описан в первом сообщении темы.

Anton04
25-12-2014, 17:20
а свою версию можете выложить, пожалуйста? »

Свою версии я привёл в посту выше (http://forum.oszone.net/post-2447030-6.html)

И чем это будет отличаться от вышеприведённого: »

Я не увидел в данном посте решение из одной или двух строк кода, исключительно по этому и привёл свой вариант.

Мешает. Нет никакой нужды удалять и затем устанавливать одну и ту же версию. »

Мне не мешает, ещё раз повторю делать так или иначе это "религия" каждого существа в отдельности. :tongue:

P.S. На этом пустую дискуссию надеюсь закрыть.

Iska
25-12-2014, 18:28
Я не увидел в данном посте решение из одной или двух строк кода, исключительно по этому и привёл свой вариант. »
Anton04, спасибо, ясно.




© OSzone.net 2001-2012