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


Функция 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

Строка, завершающая значение NULL, указывающая имя свойства.

[out] szValueBuf

Указатель на буфер, получающий строку, завершающую значение NULL, содержащую значение свойства. Не пытайтесь определить размер буфера, передав значение NULL (value=0) для szValueBuf. Размер буфера можно получить, передав пустую строку (например, ""). Затем функция вернет ERROR_MORE_DATA и pchValueBuf будет содержать требуемый размер буфера в TCHARs, не включая завершающий символ NULL. При возвращении ERROR_SUCCESS pcchValueBuf содержит количество TCHAR, записанных в буфер, не включая завершающийся символ NULL.

[in, out] pcchValueBuf

Указатель на переменную, указывающую размер буфера, на который указывает переменная szValueBuf. Когда функция возвращает ERROR_SUCCESS, эта переменная содержит размер данных, скопированных в szValueBuf, не включая завершающий символ NULL. Если szValueBuf недостаточно большой, функция возвращает ERROR_MORE_DATA и сохраняет требуемый размер, не включая конечный символ NULL, в переменной, на которую указывает pchValueBuf.

Возвращаемое значение

Эта функция возвращает UINT.

Замечания

Если значение свойства, полученного функцией msiGetProperty , не определено, это эквивалентно значению 0 длины. Это не ошибка.

Если возвращается ERROR_MORE_DATA, параметр, являющийся указателем, дает размер буфера, необходимого для хранения строки. Если возвращается ERROR_SUCCESS, оно дает количество символов, записанных в буфер строки. Таким образом, можно получить размер буфера, передав пустую строку (например, "") для параметра, указывающего буфер. Не пытайтесь определить размер буфера, передав значение NULL (значение=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
целевая платформа Виндоус
заголовка msiquery.h
библиотеки Msi.lib
DLL Msi.dll

См. также

Функции доступа к состоянию установщика

передачи null в качестве аргумента функций установщика Windows