Я пишу загрузчик для продукта с несколькими предпосылками. Чтобы определить, какие предварительные требования для установки, я использую MSI AppSearch.
Загрузчик открывает пакет myproduct.msi с ::MsiOpenPackageEx()
, затем вызывает ::MsiDoAction("AppSearch")
для загрузки свойств и, наконец, выбирает интересующие свойства, чтобы определить, какие предварительные требования требуют загрузки. Затем я закрываю сеанс prereqs (::MsiCloseHandle()
), чтобы он не мешал сеансам MSI, используемым установщиками prereqs. В конечном итоге (после установки предварительных требований) загрузчик запускает msiexec /i myproduct.msi
.
Я хочу расширить это, вызвав настраиваемое действие ::MsiDoAction("MyExtendedAppSearch")
, которое заполняет дополнительные свойства MSI во время сеанса prereqs, используя WMI для поиска, который MSI AppSearch не может выполнить. Однако когда я вызываю это действие, оно возвращает ERROR_FUNCTION_NOT_CALLED
. То же действие, когда оно вызывается в сеансе установки real , работает просто отлично.
Я пробовал это как с C .dll, так и с VBScript (встроенный, таблица Binary
, не имеет значения). По-видимому, в реальной установке выполняется какая-то инициализация, которой я не делаю. Также или альтернативно, я не устанавливаю правильные биты флага в действии, или должен планировать его в InstallExecuteSequence
(или нет, или что-то в этом роде).
Ваше руководство будет высоко ценится. Заранее спасибо.