Как интерактивно установить msi без вывода сообщений? (Прогресс данных и отменить его)

По какой-то причине мы поставляем продукт с нашим собственным графическим интерфейсом установки, это означает, что мы будем запускать установку msi в фоновом режиме.

Используя MSI API «MsiInstallProduct», я могу установить продукт в автоматическом режиме, но я понятия не имею, как мне получить данные о ходе этой установки и как отменить ее.

У кого-нибудь есть идеи?


person redjackwong    schedule 02.11.2009    source источник


Ответы (3)


Вот пример проекта, который, похоже, выполняет то, о чем вы говорите: http://www.codeproject.com/KB/cs/msiinterop.aspx

person Stein Åsmul    schedule 02.11.2009

ОБНОВЛЕНИЕ, июнь 2018 г.: хотя инструмент, показанный ниже, больше не доступен для загрузки, я нашел его через машину Wayback. Я полагаю, что это нормально и законно ссылаться на него, поскольку инструмент был бесплатным. Обновленные ссылки ниже.

ОБНОВЛЕНИЕ: Этот инструмент от Wise, к сожалению, больше не загружается. Я не уверен, можно ли его распространять. Казалось, что это бесплатный инструмент, распространяемый как часть их основного пакета Wise Package Studio, но я не думаю, что это открытый исходный код. Я бы хотел, чтобы они выпустили его как инструмент с открытым исходным кодом.

Продукты Wise Packaging были прекращены из-за ряда юридические вопросы.


Я считаю, что вы можете получить прогресс через MSI API, но на вашем месте я бы просто показал индикатор выполнения из самого MSI после вызова установки через msiexec.exe.

MSI поддерживает несколько различных уровней установки (полный, полностью бесшумный, базовый графический интерфейс, сокращенный графический интерфейс и т. Д.). В вашем случае похоже, что вам нужен базовый интерфейс. Это дает индикатор выполнения, где вы можете скрыть кнопку отмены и, при желании, показать модальное диалоговое окно завершения:

Автоматическая установка с индикатором выполнения, без кнопки отмены и без модального диалогового окна в конце:

msiexec.exe /I "Test.msi" /QB-!

Чтобы не создавать эти глупые командные строки msiexec вручную, используйте инструмент построения командной строки msi от Wise: http://web.archive.org/web/20140402194132/http://www2.wise.com/filelib/WICLB.exe (восстановлено с машины Wayback ).

Пожалуйста, запустите загрузку с virustotal.com в целях безопасности.

введите описание изображения здесь


Похожие:

person Stein Åsmul    schedule 02.11.2009
comment
Я дам вам голос, но не за свой ответ. Мы не используем графический интерфейс msi, потому что он не соответствует стилю нашего продукта, поэтому мы обеспечиваем более крутой индикатор выполнения для него, все, что мне нужно, это данные о ходе выполнения, чтобы установить нашу планку. Базовый графический интерфейс msi неприемлем. И я все еще не могу отменить его из чистого API, верно? - person redjackwong; 02.11.2009
comment
Вот пример того, как работать с рекламными щитами и индикатором выполнения MSI: sourceforge.net/projects/msiprogramming. Если это не то, что вам нужно, возможно, просмотрите ресурсы по адресу: installsite.org - person Stein Åsmul; 02.11.2009
comment
Не забудьте нажать кнопку просмотра всех файлов (иначе вы получите только демонстрацию). - person Stein Åsmul; 02.11.2009

Вам необходимо указать внешний обработчик пользовательского интерфейса с помощью MsiSetExternalUI или MsiSetExternalUIRecord перед MsiInstallProduct (последний лучше, но требует более высокой версии MSI). Указанная вами функция будет вызываться для каждого сообщения, которое установщик Windows хочет, чтобы вы обработали. Это даст вам данные и возможность ответить и сказать об отмене. Если вам требуется MSI 4.5 или более поздняя версия, вы можете использовать встроенную DLL-обработчик внешнего пользовательского интерфейса, которая не требует начальной загрузки.

person Michael Urman    schedule 02.11.2009