Управление MSI из внешней программы

У нас есть специальная программа setup.exe, которая синхронно запускает серию отдельных MSI-файлов. Схема и команда использования для запуска MSI:

msiexcehandle = CreateProcess("msiexec.exe /i  product.msi /qr")
WaitForSingleObject(msiexechandle, INFINITE)

Теперь мы хотим сделать следующее: когда пользователь нажимает кнопку "Стоп" в программе setup.exe, мы хотим полностью остановить установку. Мы можем контролировать установку любого продукта msi, который еще не запущен, но мы не нашли способа отправить какое-либо событие в уже запущенную установку (которая уже запущена с помощью CreateProcess). Мы хотим отправить событие отмены из setup.exe в созданный msiexec.exe диалог Progress.

Пожалуйста, предложите некоторую технику для выполнения этого действия. Можно ли вызвать откат при запуске установки из командной строки?

К вашему сведению, мы используем Wise для создания наших MSI и VS 2008 MFC для создания нашего setup.exe.

-Kartlee

1 ответ

Решение

Я не думаю, что это возможно, как вы описываете. Два варианта, которые я вижу, - это автоматизация пользовательского интерфейса (имитировать нажатие кнопки отмены) или внешний обработчик пользовательского интерфейса, используемый с MsiInstallProduct() вместо CreateProcess().

Обратите внимание, что в любом случае вы не всегда можете отменить настройку немедленно или вообще. В то время как ваши настройки могут не делать этого, некоторые настройки отключают кнопку отмены в определенных точках, потому что они знают, что не могут выполнить откат без ошибок.

Другие вопросы по тегам