PDA

Показать полную графическую версию : [решено] Параметр ARPSYSTEMCOMPONENT при установке MSI


m0nkrus
05-08-2014, 09:48
Так случилось, что мне нужно установить программу, запакованную в 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
Сам спросил - сам же и отвечу.

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

boss911
05-08-2014, 11:06
Отредактировать 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
Отредактировать MSI пакет, отключив создание пункта удаления приложения в "Программы и компоненты", например, с помощью ORCA, не вариант?
Не вариант. Нужно оставить всю установочную конструкцию нетронутой. Только внешнее дополнение.
Только не совсем понятно для чего скрывать, ведь отсутствие этого пункта (записи в реестре), не влияет на деинсталляцию приложения
Я делаю сборник из нескольких программ. Удаление там реализовано как общий механизм удаления всего пакета программ с выбором подпунктов для удаления. Хочу избавить конечного юзера он лицезрения дублирующих пунктов удаления в "Программы и компоненты".

boss911
05-08-2014, 14:00
Хочу избавить конечного юзера он лицезрения дублирующих пунктов удаления в "Программы и компоненты". »
Ну тогда проще грохать деинсталляционные ключ(и) в реестре после установки приложения(ий), чем скрывать, потому что все равно:
Удаление там реализовано как общий механизм удаления всего пакета программ с выбором подпунктов для удаления. »
А "общий механизм удаления" будет запускать (поочередно) -
MSIEXEC.EXE /X {AppID} /QB-! REBOOT=ReallySuppress (http://www.oszone.net/2766#msi)

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




© OSzone.net 2001-2012