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

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

Valek271183 19-07-2012 16:21 1954889

Как избежать ошибки при удалении с помощью MsiExec
 
есть файл такого содержания:

MsiExec.exe /I{2D270A67-B7CD-4281-B2FE-60DF18D19B8E}
MsiExec.exe /I{45E557D6-2271-4F13-8101-C620B4285AB0}
MsiExec.exe /I{560985FB-4B76-4121-9189-7A2CDC7886D6}
MsiExec.exe /I{45E557D6-2271-4F13-8101-C620B4285AB0}
MsiExec.exe /I{66F1F013-008F-4875-B283-5A814B820347}

это список продуктов среди которых нужно найти тот который на самом деле есть в системе и предложить его удалить/восстановить, но при запуске он не находит один из них и пишет ошибку "Это действие допускается только для установленных продуктов", как избежать ошибки?

Valek271183 20-07-2012 00:45 1955125

***

Iska 20-07-2012 12:14 1955361

Valek271183, какие это продукты? Перечислите их названия.

Valek271183 20-07-2012 14:28 1955481

это касперский разных версий, bat будет запускаться когда программа обнаружит одну из версий и запустит эти команды, только вот когда одна из них не подходит выводится на экран ошибка, пробовал несколько команд типа /passive, /q, /qn и т.п но при этом ошибки нет но и ничего не происходит

Iska 20-07-2012 15:11 1955511

Valek271183, Вы отвечаете не на мой вопрос. Ещё раз:
Цитата:

Цитата Iska
Перечислите их названия. »

Суть в том, что можно ориентироваться по общей части названий:
Код:

for /f "usebackq skip=1" %i in (`wmic.exe Product where "Name LIKE '%%Общая часть названий для потребных продуктов «Касперский»%%'" get IdentifyingNumber`) do @start "" msiexec.exe /i%i

Valek271183 20-07-2012 15:21 1955523

прикрепил файлы реестра с разделами Uninstall от некоторых версий касперского, в них есть одна общая строчка "Publisher"="Лаборатория Касперского", это поможет?

Iska 20-07-2012 15:42 1955534

Цитата:

Цитата Valek271183
прикрепил файлы реестра с разделами Uninstall от некоторых версий касперского »

В данном случае он бесполезен.

1. Получите весь список установленных посредством Windows Installer продуктов:
Код:

wmic.exe Product
2. Найдите в полученном результате части, однозначно выделяющие потребный продукт разных версий.

3. Составьте достаточное условие вместо «"Name LIKE '%%Общая часть названий для потребных продуктов «Касперский»%%'"» в:
Код:

for /f "usebackq skip=1" %i in (`wmic.exe Product where "Name LIKE '%%Общая часть названий для потребных продуктов «Касперский»%%'" get IdentifyingNumber`) do @start "" msiexec.exe /i%i
и пользуйтесь.

Valek271183 20-07-2012 15:46 1955542

Большое спасибо, вроде всё понятно, буду разбираться

Iska 21-07-2012 00:14 1955897

Valek271183, мне только сейчас пришло в голову [почему только сейчас, а не сразу — вопрос, объяснению слабо поддающийся, должно быть, сказывается косность моего мышления], что у Вас ведь уже есть это:
Цитата:

Цитата Iska
Найдите в полученном результате части, однозначно выделяющие потребный продукт разных версий. »

— разве что, не «общая часть», а перечень:
Цитата:

Цитата Valek271183
есть файл такого содержания:
MsiExec.exe /I{2D270A67-B7CD-4281-B2FE-60DF18D19B8E}
MsiExec.exe /I{45E557D6-2271-4F13-8101-C620B4285AB0}
MsiExec.exe /I{560985FB-4B76-4121-9189-7A2CDC7886D6}
MsiExec.exe /I{45E557D6-2271-4F13-8101-C620B4285AB0}
MsiExec.exe /I{66F1F013-008F-4875-B283-5A814B820347} »

Т.е., должно получиться нечто подобное:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sValue=

for /f "usebackq skip=1 tokens=3" %%i in (
        `type "%~f0" ^| find.exe /i "rem # "`
) do (
        set sValue=!sValue! OR IdentifyingNumber='%%i'
)

set sСondition=%sValue:~4%

for /f "usebackq skip=1" %%i in (
        `wmic.exe Product where "%sСondition%" get IdentifyingNumber 2^>nul`
) do (
        start "" msiexec.exe /i%%i
)

endlocal
exit /b 0

rem # {2D270A67-B7CD-4281-B2FE-60DF18D19B8E}
rem # {45E557D6-2271-4F13-8101-C620B4285AB0}
rem # {560985FB-4B76-4121-9189-7A2CDC7886D6}
rem # {45E557D6-2271-4F13-8101-C620B4285AB0}
rem # {66F1F013-008F-4875-B283-5A814B820347}

Приношу Вам свои извинения.

Valek271183 21-07-2012 12:09 1956008

Iska, спасибо за подсказку. При запуске появляется окно установщика Windows с таким содержанием: Невозможно открыть этот установочный пакет. Проверьте что пакет существует и к нему есть доступ и т.д.
Но нужную команду всё таки он запускает. Можно ли избавиться от ошибки?

Iska 21-07-2012 13:04 1956032

Valek271183, не могу сказать ничего определённого.

Попробуйте поискать решение здесь:
Microsoft Windows Installer (Установщик Windows) .:[все вопросы]:.
Windows Installer (Установщик Windows) .:[все вопросы]:.
(и там же задать данный вопрос, если не найдёте решения).

Valek271183 21-07-2012 13:06 1956034

ОК, большое спасибо


Время: 18:12.

Время: 18:12.
© OSzone.net 2001-