Функция MsiGetPropertyA (msiquery.h)
Функция MsiGetProperty получает значение свойства установщика.
Синтаксис
UINT MsiGetPropertyA(
[in] MSIHANDLE hInstall,
[in] LPCSTR szName,
[out] LPSTR szValueBuf,
[in, out] LPDWORD pcchValueBuf
);
Параметры
[in] hInstall
Дескриптор установки, предоставленной пользовательскому действию DLL или полученной через MsiOpenPackage, MsiOpenPackageEx или MsiOpenProduct.
[in] szName
Строка, завершающаяся нулевым значением, указывающая имя свойства.
[out] szValueBuf
Указатель на буфер, который получает строку, завершающуюся null, содержащую значение свойства . Не пытайтесь определить размер буфера, передав значение NULL (value=0) для szValueBuf. Размер буфера можно получить, передав пустую строку (например, ""). Затем функция возвращает ERROR_MORE_DATA а pchValueBuf будет содержать требуемый размер буфера в TCHAR, не включая завершающий символ NULL. При возвращении ERROR_SUCCESS pcchValueBuf содержит количество TCHAR, записанных в буфер, не включая завершающий символ NULL.
[in, out] pcchValueBuf
Указатель на переменную, указывающую размер буфера, на который указывает переменная szValueBuf, в TCHAR. Когда функция возвращает ERROR_SUCCESS, эта переменная содержит размер данных, скопированных в szValueBuf, не включая завершающий символ NULL. Если szValueBuf недостаточно большой, функция возвращает ERROR_MORE_DATA и сохраняет требуемый размер, не включая завершающий символ NULL, в переменной, на которую указывает pchValueBuf.
Возвращаемое значение
Эта функция возвращает UINT.
Комментарии
Если значение свойства, полученного функцией MsiGetProperty , не определено, оно эквивалентно значению длины 0. Это не ошибка.
Если возвращается ERROR_MORE_DATA, параметр, являющийся указателем, задает размер буфера, необходимый для хранения строки. Если возвращается ERROR_SUCCESS, возвращается количество символов, записанных в буфер строки. Таким образом, можно получить размер буфера, передав пустую строку (например, "") для параметра, указывающего буфер. Не пытайтесь определить размер буфера, передав значение Null (value=0).
В следующем примере показано, как настраиваемое действие DLL может получить доступ к значению свойства путем динамического определения размера буфера значений.
UINT __stdcall MyCustomAction(MSIHANDLE hInstall)
{
TCHAR* szValueBuf = NULL;
DWORD cchValueBuf = 0;
UINT uiStat = MsiGetProperty(hInstall, TEXT("MyProperty"), TEXT(""), &cchValueBuf);
//cchValueBuf now contains the size of the property's string, without null termination
if (ERROR_MORE_DATA == uiStat)
{
++cchValueBuf; // add 1 for null termination
szValueBuf = new TCHAR[cchValueBuf];
if (szValueBuf)
{
uiStat = MsiGetProperty(hInstall, TEXT("MyProperty"), szValueBuf, &cchValueBuf);
}
}
if (ERROR_SUCCESS != uiStat)
{
if (szValueBuf != NULL)
delete[] szValueBuf;
return ERROR_INSTALL_FAILURE;
}
// custom action uses MyProperty
// ...
delete[] szValueBuf;
return ERROR_SUCCESS;
}
Примечание
Заголовок msiquery.h определяет MsiGetProperty в качестве псевдонима, который автоматически выбирает версию 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. Установщик Windows в Windows Server 2003 или Windows XP |
Целевая платформа | Windows |
Header | msiquery.h |
Библиотека | Msi.lib |
DLL | Msi.dll |
См. также раздел
Функции доступа к состоянию установщика
Передача null в качестве аргумента функций установщика Windows