2016-12-14 6 views
0

Я обновляю установщик на основе InstallShield. Я добавил новое управляемое настраиваемое действие, написанное на C#, и упакованное с использованием Wix DTF. Действие вызывается правильно и выполняет необходимые действия.MSI: Показать окно сообщения в фазе пользовательского интерфейса установки

У проблемы есть сообщение об ошибке.

Метод 1: MsiProcessMessage

Из статей я прочитал, я понял, что MsiProcessMessage правильный способ сделать это, однако, этот способ не работает в последовательности UI (до установки на самом деле начинается копирование файлов и модифицирующая система). В последовательности установки этот метод работает. Код, который я использую следующее:

Record record = new Record() { FormatString = "Password is not valid for this user." }; 
session.Message(
    InstallMessage.Error | (InstallMessage)(MessageBoxIcon.Error) | (InstallMessage)MessageBoxButtons.OK, 
    record 
); 

ли это на самом деле невозможно, чтобы показать сообщение об ошибке в последовательности пользовательского интерфейса (Немедленное исполнение) с помощью MsiProcessMessage?

Метод 2: MessageBox.Show

Windows.Forms Использование произведений для показа окна сообщений. Однако сообщение отображается в фоновом режиме мастера настройки и показывает отдельный значок в панели задач Windows.

Есть ли способ получить дескриптор окна мастера установки, и таким образом решить эту проблему?

ответ

2

Вы не совсем упомянули об этом, но я предполагаю, что вы вызываете свое собственное действие с DoAction ControlEvent, опубликованное с чего-то вроде нажатия кнопки. Под крышками это сильно отличается от планирования в InstallUISequence. MsiProcessMessage doesn't work from DoAction.

Для правильной интеграции с пользовательским интерфейсом установщика Windows вы должны избегать использования MessageBox.Show (ваш метод 2). Более интегрированные варианты включают в себя:

  • Tweaking сообщение, которое можно показать в диалоговом окне, из которого вы запускаете это действие
  • Отображение всплывающего сообщения условно вызова на SpawnDialog ControlEvent
  • Отображение дополнительной панели мастера условно ссылаясь на NewDialog ControlEvent

Все три из них связаны с редактированием пользовательского интерфейса вашего проекта, но по-разному.

+0

Вы догадались совершенно правильно. Я уже выбрал 'SpawnDialog' в качестве обходного пути. Второе обходное решение заключалось в том, чтобы найти окно установщика по имени окна (зная, какое имя будет иметь мой установщик), что гораздо хуже. Спасибо за помощь! –

+0

Мне кажется тривиальным создать общий диалог сообщений в MSI, который имеет свойства MESSAGECAPTION и MESSAGETEXT. Затем в ControlEvent вы можете просто назначить эти свойства и вызвать диалог. –