Función MsiFormatRecordA (msiquery.h)

La función MsiFormatRecord da formato a los datos y propiedades del campo de registro mediante una cadena de formato.

Sintaxis

UINT MsiFormatRecordA(
  [in]      MSIHANDLE hInstall,
  [in]      MSIHANDLE hRecord,
  [out]     LPSTR     szResultBuf,
  [in, out] LPDWORD   pcchResultBuf
);

Parámetros

[in] hInstall

Identificador de la instalación. Esto se puede omitir, en cuyo caso solo se procesan los parámetros del campo de registro y las propiedades no están disponibles para la sustitución.

[in] hRecord

Identificador del registro al que se va a dar formato. La cadena de plantilla debe almacenarse en el campo de registro 0 seguido de parámetros de datos a los que se hace referencia.

[out] szResultBuf

Puntero al búfer que recibe la cadena con formato null terminada. No intente determinar el tamaño del búfer pasando un valor NULL (value=0) para szResultBuf. Puede obtener el tamaño del búfer pasando una cadena vacía (por ejemplo, ""). A continuación, la función devuelve ERROR_MORE_DATA y pcchResultBuf contiene el tamaño de búfer necesario en TCHARs, sin incluir el carácter nulo de terminación. Al devolver ERROR_SUCCESS, pcchResultBuf contiene el número de TCHARescritos en el búfer, no incluido el carácter nulo de terminación.

[in, out] pcchResultBuf

Puntero a la variable que especifica el tamaño, en TCHARs, del búfer al que apunta la variable szResultBuf. Cuando la función devuelve ERROR_SUCCESS, esta variable contiene el tamaño de los datos copiados en szResultBuf, sin incluir el carácter nulo de terminación. Si szResultBuf no es lo suficientemente grande, la función devuelve ERROR_MORE_DATA y almacena el tamaño necesario, no incluido el carácter nulo de terminación, en la variable a la que apunta pcchResultBuf.

Valor devuelto

La función MsiFormatRecord devuelve uno de los siguientes valores:

Comentarios

La función MsiFormatRecord usa el siguiente proceso de formato.

Los parámetros a los que se va a dar formato se incluyen entre corchetes [...]. Los corchetes se pueden iterar porque las sustituciones se resuelven desde el interior.

Si una parte de la cadena se encuentra entre llaves { } y no contiene corchetes, se deja sin cambios, incluidas las llaves.

Si una parte de la cadena se incluye entre llaves { } y contiene uno o varios nombres de propiedad y, si se encuentran todas las propiedades, el texto (con las sustituciones resueltas) se muestra sin las llaves. Si no se encuentra alguna de las propiedades, se quita todo el texto de las llaves y las llaves.

Tenga en cuenta que, en el caso de acciones personalizadas de ejecución diferida, MsiFormatRecord solo admite las propiedades CustomActionData y ProductCode . Para más información, consulte Obtención de información de contexto para acciones personalizadas de ejecución diferida.

En los pasos siguientes se describe cómo dar formato a cadenas mediante la función MsiFormatRecord :

Para dar formato a cadenas mediante la función MsiFormatRecord

  1. Los parámetros numéricos se sustituyen reemplazando el marcador por el valor del campo de registro correspondiente, con valores que faltan o que no generan texto.
  2. La cadena resultante se procesa reemplazando los parámetros nocord por los valores correspondientes, que se describen a continuación.
    • Si se encuentra una subcadena con el formato "[propertyname]", se reemplaza por el valor de la propiedad .
    • Si se encuentra una subcadena con el formato "[%environmentvariable]", se sustituye el valor de la variable de entorno.
    • Si se encuentra una subcadena del formulario" [#filekey]", se reemplaza por la ruta de acceso completa del archivo, por la clave de archivo de valor usada como clave en la tabla Archivo. El valor de "[#filekey]" permanece en blanco y no se reemplaza por una ruta de acceso hasta que el instalador ejecute la acción CostInitialize, la acción FileCost y la acción CostFinalize. El valor de "[#filekey]" depende del estado de instalación del componente al que pertenece el archivo. Si el componente se ejecuta desde el origen, el valor es la ruta de acceso a la ubicación de origen del archivo. Si el componente se ejecuta localmente, el valor es la ruta de acceso a la ubicación de destino del archivo después de la instalación. Si el componente está ausente, la ruta de acceso está en blanco. Para más información sobre cómo comprobar el estado de instalación de los componentes, consulte Comprobación de la instalación de características, componentes y archivos.
    • Si se encuentra una subcadena del formulario "[$componentkey]", se reemplaza por el directorio de instalación del componente, por la clave de componente de valor que se usa como clave en la tabla Componentes. El valor de "[$componentkey]" permanece en blanco y no se reemplaza por un directorio hasta que el instalador ejecuta la acción CostInitialize, la acción FileCost y la acción CostFinalize. El valor de "[$componentkey]" depende del estado de instalación del componente. Si el componente se ejecuta desde el origen, el valor es el directorio de origen del archivo. Si el componente se ejecuta localmente, el valor es el directorio de destino después de la instalación. Si el componente está ausente, el valor se deja en blanco. Para más información sobre cómo comprobar el estado de instalación de los componentes, consulte Comprobación de la instalación de características, componentes y archivos.
    • Tenga en cuenta que si un componente ya está instalado y no se vuelve a instalar, quita o mueve durante la instalación actual, el estado de acción del componente es NULL y, por lo tanto, la cadena "[$componentkey]" se evalúa como Null.
    • Si se encuentra una subcadena con el formato "[\c]", se reemplaza por el carácter sin ningún procesamiento adicional. Sólo se mantiene el primer carácter después de la barra diagonal inversa; lo demás se quita.
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 cadena. 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).

Nota:

El encabezado msiquery.h define MsiFormatRecord 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 neutro de codificación con código que no es neutral de codificación puede provocar discrepancias que dan lugar a errores de compilación o en tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

   
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.
Plataforma de destino Windows
Encabezado msiquery.h
Library Msi.lib
Archivo DLL Msi.dll

Consulte también

Pasar Null como argumento de las funciones de Windows Installer