Отправка сообщений в установщик 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 строкой "Abort" при отображении MessageBox со спецификацией кнопки MB_ABORTRETRYIGNORE, а вместо этого помечает кнопку строкой "Отмена". Все сообщения об ошибках не используют слово "Abort" и вместо него используют слово "Отмена".

Параметр hRecord функции MsiProcessMessage зависит от типа сообщения, отправленного в MsiProcessMessage. В следующем списке подробно описаны требования к записи по отношению к типу сообщения:

INSTALLMESSAGE_FATALEXIT

 

INSTALLMESSAGE_INFO

 

INSTALLMESSAGE_OUTOFDISKSPACE

Поле Описание
0 Шаблон для форматирования результирующей строки. Дополнительные сведения см. в разделе MsiFormatRecord . На поля записи ссылаются с помощью [1] для поля 1, [2] для поля 2 и т. д.
От 1 до n Все последующие поля напрямую связаны с полями, на которые ссылается шаблон в поле 0.

 

Если поле 0 имеет значение NULL, строка, полученная обработчиком пользовательского интерфейса, имеет следующий формат: 1: [данные из поля 1] 2: [данные из поля 2], что означает, что для каждого поля записи строка содержит номер поля, за которым следует данные, хранящиеся в поле.

Информационные сообщения из MsiProcessMessage регистрируются, когда MsiEnableLog, параметр командной строки "/l" или политика ведения журнала указывают "I" или INSTALLLOGMODE_INFO.

INSTALLMESSAGE_ERROR

 

INSTALLMESSAGE_WARNING

 

INSTALLMESSAGE_USER

Использование сообщения из таблицы Error.

Поле Описание
0 Должно иметь значение NULL.
1 Номер сообщения в таблице Error.
От 2 до n Относится к указанному сообщению в таблице Error.

 

Например, если выбран диапазон 10.0.0.0/20 для виртуальной сети, для пространства клиентских адресов можно выбрать 10.1.0.0/24.

Поле Тип Данные
0 строка null
1 INT 1304
2 строка Myfile.txt

 

Итоговое сообщение, полученное от обработчика пользовательского интерфейса:

Ошибка 1304. Ошибка записи в файл: Myfile.txt. Убедитесь, что у вас есть доступ к каталогу.

Если поле 0 не равно NULL, сообщение из таблицы ошибок переопределяется. Вместо этого шаблон поля 0 определяет формат сообщения.

В сообщении также могут быть указаны кнопки, включая кнопку по умолчанию, и значок для использования с сообщением, как упоминалось выше. Типы кнопок и значков перечислены в INSTALLUI_HANDLER.

INSTALLMESSAGE_COMMONDATA

Это сообщение отправляется для включения или отключения кнопки Отмена в диалоговом окне хода выполнения.

Поле Описание
0 Не используется.
1 2 относится к кнопке Отмена .
2 Значение 1 указывает, что должна отображаться кнопка Отмена . Значение 0 указывает, что кнопка Отмена должна быть невидимой.

 

Например, чтобы отключить или скрыть кнопку Отмена , запись будет отображаться следующим образом.

Поле Тип Данные
0 строка null
1 INT 2
2 INT 0

 

INSTALLMESSAGE_ACTIONSTART

 

INSTALLMESSAGE_ACTIONDATA

Запись INSTALLMESSAGE_ACTIONSTART определяет формат записи ActionData.

Поле Описание
0 null
1 Имя действия. Имя в этом поле должно быть не равно NULL.
2 Описание действия.
3 Шаблон действия. Используется для ActionData, сообщение которого форматируется в соответствии с этим шаблоном.

 

Не ссылайтесь на поле 0 в сообщении шаблона действия.

Запись INSTALLMESSAGE_ACTIONDATA форматируется следующим образом.

Поле Описание
0 null
От 1 до n Зависит от поля 3 соответствующего INSTALLMESSAGE_ACTIONSTART сообщения или шаблона, указанного в таблице ActionText.

 

Например, запись INSTALLMESSAGE_ACTIONSTART.

Поле Тип Данные
0 строка null
1 строка MyAction
2 строка Это описание "MyAction"
3 строка Шаблон MyAction: данные field1 — [1]. Данные поля 2 — [2].

 

Шаблон для INSTALLMESSAGE_ACTIONSTART (поле 3) ссылается на поля 1 и 2, запись INSTALLMESSAGE_ACTIONDATA должна содержать 2 поля, содержащие обязательные данные. Поля могут быть строковыми или целыми числами.

запись INSTALLMESSAGE_ACTIONDATA.

Поле Тип Данные
0 строка null
1 INT 2
2 строка ActionData для MyAction

 

INSTALLMESSAGE_FILESINUSE

Запись 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 в следующем примере должны содержать идентификаторы PID процессов, содержащих red.exe и blue.exe.

Поле Описание
0 null
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 null
1 null
2 Имя пакета.
3 Код продукта.
4 Относительный путь, если он известен, может иметь значение NULL.
5 0
6 Проверяется ли код пакета. Значение "1" указывает, что код пакета должен быть проверен. Значение "0" указывает, что пакет не должен проверяться.
7 Обязательный диск из таблицы мультимедиа. Значение "0" указывает, что любой диск является допустимым.