Измените значение свойства MSI, загруженного из DLL, используя преобразование MSI - PullRequest
0 голосов
/ 19 февраля 2019

Мне нужно изменить поведение установки MSI для установки «IBM i Access for Windows».Настройка была создана с помощью InstallShield.Во время установки программа запускает две другие установки MSI через «цепочку».Параметры, переданные MSIEXEC.EXE для выполнения этих двух установок, загружаются с помощью специального действия из библиотеки DLL, которая включена в установку.Параметры заканчиваются в свойстве MSI.

Я хочу изменить значение в этом свойстве, чтобы манипулировать командной строкой до запуска цепной установки.Это возможно?Если так, то как?У меня нет проблем с созданием внешней DLL, которая считывает и изменяет свойство, но я не знаю, как интегрировать это с существующей установкой - какие таблицы мне нужно изменить и как, где я должен поместить DLL,...

РЕДАКТИРОВАТЬ 1 : Чтобы уточнить это: я хочу изменить параметры, передаваемые в цепочку установок MSI.Они не зависят от параметров, которые я передаю основной установке, и загружаются из DLL, являющейся частью установки.

РЕДАКТИРОВАНИЕ 2 : я загрузил простую MSI + соответствующий файл журнала .Я начинаю основную установку с "/ qn", чтобы подавить все сообщения.Это работает без проблем, связанные установки выполняются без видимых подсказок.Проблема возникает при удалении программного обеспечения (снова с «/ qn»).Удаленное настраиваемое действие загружается из DLL (строка 6417):

MSI (s) (10:28) [09:00:45:643]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIA4BD.tmp, Entrypoint: ISChainPackages

В командной строке, загружаемой из DLL, указывается вызов MSIEXEC.EXE с параметром "/ qb" вместо "/ qn" (строка 6958):

MSI (s) (10!60) [09:00:46:033]: PROPERTY CHANGE: Adding IS_CHAINER_POST_COMMANDLINE property. Its value is '/l"c:\temp\IBM_iAccess_7.1_Uninstall.log" /qb /x{CCA40632-843E-48C6-B14F-E1070015D87C} ...

И поскольку установщик MSI заблокировал файл, всплывающее окно сообщений вызвано удалением цепочки MSI (строка 44046):

MSI (s) (10:C0) [09:01:05:553]: RESTART MANAGER: Did detect that the custom action server with process ID 2352 holds file[s] in use, so a reboot will be necessary.
MSI (s) (10:C0) [09:01:05:553]: Note: 1: 1610 
MSI (s) (10:C0) [09:01:11:224]: RESTART MANAGER: The user chose to go on with the installation, although a reboot will be required.
The setup must update files or services that cannot be updated while the system is running. If you choose to continue, a reboot will be required to complete the setup.

Установочные файлы для версии 7.1 этого программного обеспечения больше не доступны на веб-сайте IBM .Только текущая версия, и я не изучал, существует ли проблема с последней версией или нет, так как бизнес-отдел попросил меня упаковать v7.1.

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Одним из подходов к этой проблеме может быть создание нового пользовательского действия, которое выполняет код VBScript, хранящийся в таблице Binary, и размещение нового пользовательского действия сразу после ISChainPackagePrepare.Код VBScript прочитает значение IS_CHAINER_POST_COMMANDLINE и заменит его, как указано в функции Replace()

Код VBScript может выглядеть следующим образом:

Option Explicit

Function ReplacePropVal()
    dim propvalue
    dim newvalue
    propvalue = Session.Property("IS_CHAINER_POST_COMMANDLINE")
    newvalue = Replace(propvalue,"/qb","/qn")
    Session.Property("IS_CHAINER_POST_COMMANDLINE") = newvalue
End Function

Вы хотите указать свойновое настраиваемое действие a Тип 6 указывает, что ваши данные настраиваемого действия хранятся в виде VBScript в таблице Binary.Ваше пользовательское действие Source является ссылкой на Name в таблице Binary.Значение Target вашего пользовательского действия должно быть именем функции VBScript, которое в данном случае равно ReplacePropVal

После этого вы помещаете новое пользовательское действие в таблицу InstallExecutionSequence, используя то же самоеимя для него, как в таблице CustomAction.Также убедитесь, что для него задано более высокое значение Sequence, равное ISChainPackagePrepare.Я бы порекомендовал разместить его сразу после увеличения значения Sequence на ISChainPackagePrepare на 1.

После того, как вы изменили таблицы и сгенерировали новое преобразование, просто запустите пакет с примененным новым преобразованиемуказав его путь в публичном свойстве TRANSFORMS, и значение вашего свойства должно быть изменено.

0 голосов
/ 02 марта 2019

Я думаю, что идеальным подходом здесь было бы преобразование определения связанного пакета.Уровень пользовательского интерфейса ( документация ) хранится в первых двух битах столбца параметров таблицы ISChainPackage , поэтому все преобразование должно быть изменено.это значение.В частности, вы можете изменить эти биты с ecoUIBasic (0) на ecoUINone (1), что должно быть так же просто, как добавить 1 к текущему значению.Также доступны ecoUIReduced (2) и ecoUIFull (3).

Если ISChainPackage.Options правильно изменен, для вас будет сгенерирован необходимый IS_CHAINER_POST_COMMANDLINE,и вам не нужно будет добавлять дополнительное пользовательское действие, чтобы потом изменить /qb на /qn.(Престижность к sevi для того, чтобы предложить этот функциональный обходной путь.)

0 голосов
/ 19 февраля 2019

Если это Advanced или Suite UI Setup.exe , проверьте эту ссылку, чтобы узнать, как передать свойство.

Пакетные записи базы данных (Советы по переупаковке программного обеспечения для iAccess и другого программного обеспечения):


Подходы : Что делает это настраиваемое действие DLL?Создает ли он лицензионный ключ?Часто эти вещи были найдены и решены много раз прежде.Чтобы проверить это, я обычно использую следующие подходы для поиска решений:

  • Извлечение файла : попробуйте извлечь файлы из установки и найти файлы справки, которыеопишите правильное размещение."Large Scale Deployment.chm", "Installation Command Line Parameters.chm" и т. Д. ... или готовые преобразования или примеры файлов командной строки (Install.cmd).
  • Сайты развертывания : проверка https://www.itninja.com/company/browse/i (Советы по переупаковке программного обеспечения - look at the IBM entries. Несколько записей, вот один ).
  • Форумы : проверьте их форумы поддержки или онлайнподдержка - при наличии.
  • Телефон : свяжитесь с продавцом по телефону.Иногда очень полезно, часто трата времени.Запросите информацию о развертывании, полученную от службы поддержки.Сделайте это, если у вас есть соглашение о поддержке?

См. Раздел об извлечении файлов ниже.

Setup.exe Ключи : у меня есть аналогичный или связанный ответ, где я также упоминаю ключи командной строки setup.exe: Программа установки без вывода сообщений (.exe) с параметрами в Windows .


Ведение журнала : если пользовательское действие не создает чего-либо динамического (уникальный лицензионный ключ, идентификатор блокировки компьютера и т. Д.), То вы можете попытаться найти то, что было сгенерировано регистрация настроек и поиск командной строки, используемой в файле журнала.Образец макета:

MSI (s) (AC:00) [00:00:00:00]: Command Line: TARGETDIR=C:\ SHORTCUTDIR=C:\Documents and Settings\All Users\Start Menu\Programs\Test ACTION=INSTALL 

Извлечение файла : Это проект Installshield Suite ?Вы сначала извлекли встроенные файлы и файлы MSI ?: Программно извлекать содержимое InstallShield setup.exe .

Что находится в файле Setup.exe? : файлы Installshield setup.exe могут быть разными (объяснение различных разновидностей setup.exe): Относительно установки без вывода сообщений с использованием Setup.exe, созданного с использованием файла проекта Installshield 2013 (.issuite) .


Ссылки :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...