Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Батник для удаления старых версий Java и установки новой (http://forum.oszone.net/showthread.php?t=292716)

arman29 18-12-2014 08:07 2445258

Батник для удаления старых версий Java и установки новой
 
Добрый день!

Ситуация: используется 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 2445263

Выложите вывод:
Код:

wmic.exe Product
строки с Java для каждой из версий.

arman29 18-12-2014 08:40 2445266

спасибо большое, но, если честно, не работал с командой "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 2445271

Неправильно. Сделайте ровно то, о чём я прошу.

Откройте командную строку, наберите:
Код:

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

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

arman29 18-12-2014 11:52 2445322

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 2447030

arman29,

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

Код:

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

Iska 22-12-2014 23:55 2447051

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

Anton04 23-12-2014 16:48 2447316

Цитата:

Цитата Iska
а как быть с «Name», которое «J2SE Runtime Environment»? »

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

Цитата:

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

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

arman29 23-12-2014 17:51 2447340

Цитата:

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

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

Iska 23-12-2014 18:36 2447362

Цитата:

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

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

…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
Но ничто не мешает не определять версию, а банально удалить все версии и поставить нужную. »

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

Цитата:

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

Сценарий описан в первом сообщении темы.

Anton04 25-12-2014 17:20 2448181

Цитата:

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

Свою версии я привёл в посту выше

Цитата:

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

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

Цитата:

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

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

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

Iska 25-12-2014 18:28 2448209

Цитата:

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

Anton04, спасибо, ясно.


Время: 20:15.

Время: 20:15.
© OSzone.net 2001-