Как интерактивно установить MSI в режиме без вывода сообщений? (Выполните данные и отмените их) - PullRequest
5 голосов
/ 02 ноября 2009

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

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

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

Ответы [ 3 ]

7 голосов
/ 02 ноября 2009

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

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

Упаковка продуктов Wise прекращена из-за ряда юридических вопросов .


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

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

Установка без вывода сообщений с индикатором выполнения, без кнопки отмены и без модального диалога в конце:

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

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

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

enter image description here


Относящиеся

5 голосов
/ 02 ноября 2009

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

3 голосов
/ 02 ноября 2009

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

...