Función MsiGetPropertyW (msiquery.h)
La función MsiGetProperty obtiene el valor de una propiedad del instalador.
Sintaxis
UINT MsiGetPropertyW(
[in] MSIHANDLE hInstall,
[in] LPCWSTR szName,
[out] LPWSTR szValueBuf,
[in, out] LPDWORD pcchValueBuf
);
Parámetros
[in] hInstall
Identificador de la instalación proporcionada a una acción personalizada de DLL o obtenida a través de MsiOpenPackage, MsiOpenPackageEx o MsiOpenProduct.
[in] szName
Cadena terminada en NULL que especifica el nombre de la propiedad.
[out] szValueBuf
Puntero al búfer que recibe la cadena terminada en null que contiene el valor de la propiedad . No intente determinar el tamaño del búfer pasando un valor NULL (value=0) para szValueBuf. Puede obtener el tamaño del búfer pasando una cadena vacía (por ejemplo, ""). A continuación, la función devolverá ERROR_MORE_DATA y pchValueBuf contendrá el tamaño de búfer necesario en TCHAR, sin incluir el carácter nulo de terminación. Al devolver ERROR_SUCCESS, pcchValueBuf contiene el número de TCHAR escritos en el búfer, sin incluir el carácter nulo de terminación.
[in, out] pcchValueBuf
Puntero a la variable que especifica el tamaño, en TCHAR, del búfer al que apunta la variable szValueBuf. Cuando la función devuelve ERROR_SUCCESS, esta variable contiene el tamaño de los datos copiados en szValueBuf, sin incluir el carácter nulo de terminación. Si szValueBuf no es lo suficientemente grande, la función devuelve ERROR_MORE_DATA y almacena el tamaño necesario, sin incluir el carácter nulo de terminación, en la variable a la que apunta pchValueBuf.
Valor devuelto
Esta función devuelve UINT.
Comentarios
Si no se define el valor de la propiedad recuperada por la función MsiGetProperty , equivale a un valor de longitud 0. No se trata de un error.
Si se devuelve ERROR_MORE_DATA, el parámetro que es un puntero proporciona el tamaño del búfer necesario para contener la cadena. Si se devuelve ERROR_SUCCESS, proporciona el número de caracteres escritos en el búfer de cadenas. Por lo tanto, puede obtener el tamaño del búfer pasando una cadena vacía (por ejemplo, "") para el parámetro que especifica el búfer. No intente determinar el tamaño del búfer pasando un valor Null (value=0).
En el ejemplo siguiente se muestra cómo una acción personalizada de DLL podría tener acceso al valor de una propiedad mediante la determinación dinámica del tamaño del búfer de valores.
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;
}
Nota
El encabezado msiquery.h define MsiGetProperty como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Installer 5.0 en Windows Server 2012, Windows 8, Windows Server 2008 R2 o Windows 7. Windows Installer 4.0 o Windows Installer 4.5 en Windows Server 2008 o Windows Vista. Windows Installer en Windows Server 2003 o Windows XP |
Plataforma de destino | Windows |
Encabezado | msiquery.h |
Library | Msi.lib |
Archivo DLL | Msi.dll |
Consulte también
Funciones de acceso de estado del instalador
Pasar null como argumento de las funciones de Windows Installer