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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка приложений (http://forum.oszone.net/forumdisplay.php?f=61)
-   -   [решено] Параметр ARPSYSTEMCOMPONENT при установке MSI (http://forum.oszone.net/showthread.php?t=286026)

m0nkrus 05-08-2014 09:48 2385303

Параметр ARPSYSTEMCOMPONENT при установке MSI
 
Так случилось, что мне нужно установить программу, запакованную в MSI-инсталлер. А еще нужно, чтобы эта программа не светилась для удаления в "Программы и компоненты" в Панели управления. Звучит, вроде просто - прописывай параметр ARPSYSTEMCOMPONENT хотя бы в командной строке вкупе с MSI и все, но есть нюанс...

Инсталлер этот запускается другим инсталлером - ехе-шником. Оба этих инсталлера сами тоже запакованы в самораспаковывающийся ехе-архив, который тоже запускается не сам, а с помощью еще одного ехе-инсталлера. Второй и третий инсталлер не понимают команд, формата Windows Installer. В общем, структура еще та... Не подумайте, что я прячу троян или что-то подобное. Это я описал структуру запуска установки Adobe Muse CC.

Как вы понимаете, воспользоваться параметром ARPSYSTEMCOMPONENT не разворошив весь этот муравейник невозможно. Увы, это не вариант. Отсюда вопрос: Что в реестре нужно вручную проделать, чтобы произвести работу, аналогичную параметру ARPSYSTEMCOMPONENT, то есть сокрытие иконки удаления в "Программы и компоненты", без разрушения самого механизма удаления программы?

Для справки:
ARPSYSTEMCOMPONENT - Prevents display of the application in the Programs List of the Add/Remove Programs in the Control Panel.
Note This only affects the display in the ARP. The Windows Installer is still capable of repairing, installing-on-demand, and uninstalling applications through a command line or the programming interface.

m0nkrus 05-08-2014 10:50 2385317

Сам спросил - сам же и отвечу.

Я искал нужный параметр реестра по пути HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall и не находил его. Поэтому и сюда обратился. Я не учел, что программа 32-битная, а система у меня 64-битная. И, следовательно, путь реестра, где находится нужный мне параметр, это HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall.

boss911 05-08-2014 11:06 2385318

Отредактировать MSI пакет, отключив создание пункта удаления приложения в "Программы и компоненты", например, с помощью ORCA, не вариант? Я так пару раз поступал и ничего страшного, что при этом у MSI слетает цифровая подпись (если она есть), сложности возникают только в том случае, если MSI защищен от редактирования (редкость). Деинсталляция приложения при этом реализовывается таким образом/командой (ярлыком или батником):
Код:

MSIEXEC.EXE /X {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
А если надо скрыть пункт (иконку) удаления приложения в "Программы и компоненты", в реестр надо добавить следующие (не забываем учитывать разрядность по/ос):
Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}]
"SystemComponent"=dword:00000001

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

X - код продукта (Application ID).

m0nkrus 05-08-2014 12:31 2385342

Цитата:

Отредактировать MSI пакет, отключив создание пункта удаления приложения в "Программы и компоненты", например, с помощью ORCA, не вариант?
Не вариант. Нужно оставить всю установочную конструкцию нетронутой. Только внешнее дополнение.
Цитата:

Только не совсем понятно для чего скрывать, ведь отсутствие этого пункта (записи в реестре), не влияет на деинсталляцию приложения
Я делаю сборник из нескольких программ. Удаление там реализовано как общий механизм удаления всего пакета программ с выбором подпунктов для удаления. Хочу избавить конечного юзера он лицезрения дублирующих пунктов удаления в "Программы и компоненты".

boss911 05-08-2014 14:00 2385359

Цитата:

Цитата m0nkrus
Хочу избавить конечного юзера он лицезрения дублирующих пунктов удаления в "Программы и компоненты". »

Ну тогда проще грохать деинсталляционные ключ(и) в реестре после установки приложения(ий), чем скрывать, потому что все равно:
Цитата:

Цитата m0nkrus
Удаление там реализовано как общий механизм удаления всего пакета программ с выбором подпунктов для удаления. »

А "общий механизм удаления" будет запускать (поочередно) -
Код:

MSIEXEC.EXE /X {AppID} /QB-! REBOOT=ReallySuppress

m0nkrus 05-08-2014 19:55 2385457

boss911, тут есть нюанс. Общий механизм удаления берет параметры удаления как раз-таки из реестра, из той самой ветки Uninstall. Именно поэтому требуется сокрытие, а не удаление. Не все программы в пакете на основе MSI-инсталлера, так что тут единый подход не работает. Впрочем, Muse с этим сверххитрым установщиком умудряется создавать в Uninstall аж два раздела. Один вида {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}, а второй - Adobe Muse. Так вот, если УДАЛИТЬ второй раздел, то общий механизм удаления работает, а персональный для Muse пропадает. То, что мне и нужно.


Время: 21:54.

Время: 21:54.
© OSzone.net 2001-