Отправка сообщений в установщик Windows с помощью MsiProcessMessage
Сообщения, отправляемые с помощью MsiProcessMessage, являются теми же сообщениями, которые получены функцией обратного вызова INSTALLUI_HANDLER, если был вызван MsiSetExternalUI. В противном случае установщик Windows обрабатывает сообщения. Дополнительные сведения см. в разделе Анализ сообщений установщика Windows.
Например, чтобы отправить сообщение INSTALLMESSAGE_ERROR со значком MB_ICONWARNING и кнопками MB_ABORTRETRYCANCEL:
PMSIHANDLE hInstall;
PMSIHANDLE hRec;
MsiProcessMessage(hInstall, INSTALLMESSAGE(INSTALLMESSAGE_ERROR|MB_ABORTRETRYIGNORE|MB_ICONWARNING), hRec);
Где hInstall — это дескриптор установки, предоставленный пользовательскому действию или дескриптор hProduct от MsiOpenProduct или MsiOpenPackage, а hRec — это запись, содержащая сведения об ошибке для форматирования. Сведения о том, как выполняется форматирование, см. в разделе MsiFormatRecord.
По умолчанию, если сообщение INSTALLMESSAGE_ERROR или INSTALLMESSAGE_FATALEXIT отправляется без указания типа кнопки или типов значков, используются MB_OK, без значка и MB_DEFBUTTON1.
Установщик Windows не помечает кнопку ABORT строкой "Прерывание" при отображении MessageBox со спецификацией кнопки MB_ABORTRETRYIGNORE, вместо этого помечает кнопку строкой "Отмена". Все сообщения об ошибках воздерживаются от использования слова "Прерывание" и вместо этого используют слово "Отмена".
Параметр hRecord функции MsiProcessMessage зависит от типа сообщения, отправленного в MsiProcessMessage. Следующий список содержит сведения о требованиях записи относительно типа сообщения:
INSTALLMESSAGE_FATALEXIT
УСТАНОВКА_СООБЩЕНИЕ_ИНФО
УСТАНОВКА: Недостаточно места на диске
Поле | Описание |
---|---|
0 | Шаблон форматирования результирующей строки. Дополнительные сведения см. в MsiFormatRecord. Поля записи обозначаются с помощью [1] для поля 1, [2] для поля 2 и т. д. |
1–n | Все последующие поля напрямую связаны с полями, на которые ссылается шаблон в поле 0. |
Если поле 0 равно NULL, строка, полученная обработчиком пользовательского интерфейса, форматируется следующим образом: 1: [данные из поля 1] 2: [данные из поля 2] означает, что для каждого поля записи строка содержит номер поля, за которым следует данные, хранящиеся в поле.
Информационные сообщения из MsiProcessMessage регистрируются, когда MsiEnableLog, параметр командной строки "/l"или политика регистрации журнала указывает "I" или INSTALLLOGMODE_INFO.
ИНСТАЛЛСООБЩЕНИЕ_ОШИБКА
ПРЕДУПРЕЖДЕНИЕ_УСТАНОВКИ
УСТАНОВИТЬСООБЩЕНИЕ_ПОЛЬЗОВАТЕЛЬ
Использовать сообщение из таблицы ошибок.
Поле | Описание |
---|---|
0 | Должен иметь значение NULL. |
1 | Номер сообщения в таблице ошибок . |
От 2 до и | Связано с указанным сообщением в таблице ошибок. |
Например.
Поле | Тип | Данные |
---|---|---|
0 | струна | нулевой |
1 | int | 1304 |
2 | струна | Myfile.txt |
Полученное сообщение от обработчика пользовательского интерфейса:
Ошибка 1304. Ошибка записи в файл: Myfile.txt. Убедитесь, что у вас есть доступ к такому каталогу.
Если поле 0 не равно null, сообщение из таблицы ошибок переопределяется. Вместо этого шаблон поля 0 определяет формат сообщения.
Сообщение также может указывать кнопки, включая кнопку по умолчанию, и значок для использования с сообщением, как упоминалось выше. Типы кнопок и значков перечислены в INSTALLUI_HANDLER.
INSTALLMESSAGE_COMMONDATA
Это сообщение отправляется для включения или отключения кнопки Отмена в диалоговом окне прогресса.
Поле | Описание |
---|---|
0 | Неиспользованный. |
1 | 2 — кнопка Отмена. |
2 | Значение 1 указывает, что должна быть видна кнопка "Отмена". Значение 0 указывает, что кнопка "Отмена" должна быть невидимой. |
Например, чтобы отключить или скрыть кнопку Отмена, запись будет отображаться следующим образом.
Поле | Тип | Данные |
---|---|---|
0 | струна | нулевой |
1 | int | 2 |
2 | int | 0 |
INSTALLMESSAGE_ACTIONSTART
УСТАНОВИТЬ_СООБЩЕНИЕ_ДАННЫЕ_ДЕЙСТВИЯ
Запись INSTALLMESSAGE_ACTIONSTART определяет формат записи ActionData.
Поле | Описание |
---|---|
0 | нулевой |
1 | Имя действия. Имя в этом поле не должно быть пустым. |
2 | Описание действия. |
3 | Шаблон действия. Это используется для ActionData, сообщение которого форматируется в соответствии с этим шаблоном. |
Не ссылайтесь на поле 0 в сообщении шаблона действия.
Запись INSTALLMESSAGE_ACTIONDATA форматируется следующим образом.
Поле | Описание |
---|---|
0 | нулевой |
1–n | Зависит от поля 3 соответствующего сообщения INSTALLMESSAGE_ACTIONSTART или шаблона, указанного в таблице ActionText . |
Например, запись под названием INSTALLMESSAGE_ACTIONSTART.
Поле | Тип | Данные |
---|---|---|
0 | струна | нулевой |
1 | струна | MyAction |
2 | струна | Это описание "MyAction" |
3 | струна | Шаблон MyAction: данные field1 — [1]. значение поля 2 — [2]. |
Шаблон для INSTALLMESSAGE_ACTIONSTART (поле 3) ссылается на поля 1 и 2, запись INSTALLMESSAGE_ACTIONDATA должна содержать 2 поля, содержащие оправданные данные. Поля могут быть строковыми или целыми полями.
запись INSTALLMESSAGE_ACTIONDATA.
Поле | Тип | Данные |
---|---|---|
0 | струна | недействительный |
1 | int | 2 |
2 | струна | ActionData для MyAction |
Установочное сообщение: файлы используются
Запись FILESINUSE — это запись переменной длины.
Поле | Описание |
---|---|
0 | Это поле может иметь значение NULL. Для установки с использованием базового пользовательского интерфейса в этом поле может быть указан статический текст для отображения в элементе управления ListBox диалогового окна FilesInUse. Для установки с использованием полного пользовательского интерфейса это поле не влияет, поскольку текст задается автором настраиваемого диалогового окна FilesInUse. |
1 | Имя используемого файла. |
2 | Это поле идентифицирует процесс хранения используемого файла.Установщик Windows версии 4.0: идентификатор процесса (PID) процесса или название окна для процесса. Установщик Windows версии 3.1 и более ранние: Это поле должно быть идентификатором процесса (PID). |
Например, чтобы отправить сообщение FilesInUse с двумя файлами, red.exe и blue.exe, запись содержит четыре поля плюс поле 0. Формат записи будет показан в следующей таблице. В этом примере требуется установщик Windows версии 4.0.
Установщик Windows версии 3.1 и более ранних версий: поля 2 и 4 в следующем примере должны содержать идентификаторы процессов, использующих red.exe и blue.exe.
Поле | Описание |
---|---|
0 | недействительный |
1 | Red.exe |
2 | Красный заголовок окна |
3 | Blue.exe |
4 | Заголовок синего окна |
Заметка
В установщике Windows версии 4.0, если PID, переданный из службы, не имеет заголовка окна, как, например, приложение в системном трее, файл не отображается, а детализированный журнал содержит следующие сообщения.
File In Use: -<FileName>- Window could not be found. Process ID: <PID>
No window with title could be found for FilesInUse
INSTALLMESSAGE_RESOLVESOURCE
Запись INSTALLMESSAGE_RESOLVESOURCE содержит семь полей. Для правильной работы INSTALLMESSAGE_RESOLVESOURCE внешний обработчик пользовательского интерфейса может не обрабатывать сообщение INSTALLMESSAGE_RESOLVESOURCE. Установщик Windows должен обрабатывать сообщение INSTALLMESSAGE_RESOLVESOURCE. То есть, внешний обработчик пользовательского интерфейса возвращает 0, чтобы указать, что "действие не выполнено" при фильтрации сообщения INSTALLMESSAGE_RESOLVESOURCE. Рекомендуется избежать отправки сообщения RESOLVESOURCE.
Поле | Описание |
---|---|
0 | нулевой |
1 | нулевой |
2 | Имя пакета. |
3 | Код продукта. |
4 | Относительный путь, если известный, может иметь значение NULL. |
5 | 0 |
6 | Нужно ли проверять код пакета. Значение "1" указывает, что код пакета должен быть проверен. Значение "0" указывает, что пакет не должен быть проверен. |
7 | Обязательный диск из таблицы носителей. Значение "0" указывает, что любой диск является допустимым. |