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