Поделиться через


Отправка сообщений в установщик 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" указывает, что любой диск является допустимым.