Функция MsiFormatRecordA (msiquery.h)
Функция MsiFormatRecord форматирует данные поля записи и свойства с помощью строки форматирования.
Синтаксис
UINT MsiFormatRecordA(
[in] MSIHANDLE hInstall,
[in] MSIHANDLE hRecord,
[out] LPSTR szResultBuf,
[in, out] LPDWORD pcchResultBuf
);
Параметры
[in] hInstall
Дескриптор установки. Это может быть опущено, в этом случае обрабатываются только параметры поля записи, а свойства недоступны для подстановки.
[in] hRecord
Обработка записи для форматирования. Строка шаблона должна храниться в поле записи 0, за которым следует ссылаться параметры данных.
[out] szResultBuf
Указатель на буфер, получающий отформатированную строку со значением NULL. Не пытайтесь определить размер буфера, передав значение NULL (значение=0) для szResultBuf. Размер буфера можно получить, передав пустую строку (например, ""). Затем функция возвращает ERROR_MORE_DATA и pcchResultBuf содержит требуемый размер буфера в TCHAR, не включая завершающийся символ NULL. При возврате ERROR_SUCCESSpcchResultBuf содержит количество TCHARзаписываемых в буфер, а не в том числе завершающий символ NULL.
[in, out] pcchResultBuf
Указатель на переменную, указывающую размер в TCHARs, буфера, на который указывает переменная szResultBuf. Когда функция возвращает ERROR_SUCCESS, эта переменная содержит размер данных, скопированных в szResultBuf, не включая завершающий символ NULL. Если szResultBuf недостаточно большой, функция возвращает ERROR_MORE_DATA и сохраняет требуемый размер, не включая конечный символ NULL, в переменной, на которую указывает pcchResultBuf.
Возвращаемое значение
Функция
Замечания
Функция MsiFormatRecord использует следующий процесс форматирования.
Параметры, которые должны быть форматированные, заключены в квадратные скобки [...]. Квадратные скобки можно итерировать, так как замены разрешаются изнутри.
Если часть строки заключена в фигурные скобки { } и не содержит квадратных скобков, она остается без изменений, включая фигурные скобки.
Если часть строки заключена в фигурные скобки { } и содержит одно или несколько имен свойств, а если найдены все свойства, текст (с разрешенными подстановками) отображается без фигурных скобков. Если какие-либо свойства не найдены, все текст в фигурных скобках и фигурные скобки удаляются.
Обратите внимание, что в случае отложенного выполнения пользовательских действий MsiFormatRecord поддерживает только свойства CustomActionData и ProductCode. Дополнительные сведения см. в разделе Получение сведений о контексте для пользовательских действий отложенного выполнения.
Ниже описано форматирование строк с помощью функции MsiFormatRecord:
Форматирование строк с помощью функции MsiFormatRecord
- Числовые параметры заменяются заменой маркера соответствующим полем записи с отсутствующими или пустыми значениями без текста.
-
Результирующая строка обрабатывается путем замены некорректных параметров соответствующими значениями, описанными далее.
- Если обнаружена подстрока формы "[propertyname], она заменяется значением свойства.
- Если найдена подстрока формы "[%environmentvariable]", то значение переменной среды будет заменено.
- Если найдена подстрока формы "[#filekey]", то она заменена полным путем к файлу, значением файлового ключа, используемым в качестве ключа в таблице файлов. Значение "[#filekey]" остается пустым и не заменяется путем, пока установщик не запустит действие CostInitialize, действие FileCostи действие CostFinalize. Значение "[#filekey]" зависит от состояния установки компонента, к которому принадлежит файл. Если компонент выполняется из источника, значением является путь к исходному расположению файла. Если компонент выполняется локально, значением является путь к целевому расположению файла после установки. Если компонент отсутствует, путь пуст. Дополнительные сведения о проверке состояния установки компонентов см. в разделе проверка установки компонентов, компонентов, файлов.
- Если найдена подстрока формы "[$componentkey]", она заменена каталогом установки компонента, значением компонента, используемым в качестве ключа в таблице компонентов . Значение "[$componentkey]" остается пустым и не заменяется каталогом, пока установщик не запустит действие CostInitialize, действие FileCostи действие CostFinalize. Значение "[$componentkey]" зависит от состояния установки компонента. Если компонент выполняется из источника, это значение является исходным каталогом файла. Если компонент выполняется локально, значение является целевым каталогом после установки. Если компонент отсутствует, значение остается пустым. Дополнительные сведения о проверке состояния установки компонентов см. в разделе проверка установки компонентов, компонентов, файлов.
- Обратите внимание, что если компонент уже установлен и не переустановлен, удален или перемещен во время текущей установки, состояние действия компонента равно NULL, поэтому строка "[$componentkey]" оценивается как NULL.
- Если найдена подстрока формы "[\c], она заменяется символом без дополнительной обработки. Только первый символ после обратной косой черты сохраняется; все остальное удаляется.
Заметка
Заголовок msiquery.h определяет MsiFormatRecord как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Установщик Windows 5.0 в Windows Server 2012, Windows 8, Windows Server 2008 R2 или Windows 7. Установщик Windows 4.0 или установщик Windows 4.5 в Windows Server 2008 или Windows Vista. |
целевая платформа | Виндоус |
заголовка | msiquery.h |
библиотеки |
Msi.lib |
DLL | Msi.dll |
См. также
передачи null в качестве аргумента функций установщика Windows