Compartilhar via


Função MsiFormatRecordA (msiquery.h)

A função MsiFormatRecord formata dados de campo de registro e propriedades usando uma cadeia de caracteres de formato.

Sintaxe

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

Parâmetros

[in] hInstall

Manipule para a instalação. Isso pode ser omitido, caso em que somente os parâmetros de campo de registro são processados e as propriedades não estão disponíveis para substituição.

[in] hRecord

Manipule para o registro a ser formatado. A cadeia de caracteres de modelo deve ser armazenada no campo de registro 0 seguido por parâmetros de dados referenciados.

[out] szResultBuf

Ponteiro para o buffer que recebe a cadeia de caracteres formatada terminada nula. Não tente determinar o tamanho do buffer passando um valor nulo (valor=0) para szResultBuf. Você pode obter o tamanho do buffer passando uma cadeia de caracteres vazia (por exemplo, ""). Em seguida, a função retorna ERROR_MORE_DATA e pcchResultBuf contém o tamanho do buffer necessário em TCHAR, não incluindo o caractere nulo de terminação. No retorno de ERROR_SUCCESS, pcchResultBuf contém o número de TCHARgravados no buffer, não incluindo o caractere nulo de terminação.

[in, out] pcchResultBuf

Ponteiro para a variável que especifica o tamanho, em TCHAR, do buffer apontado pela variável szResultBuf. Quando a função retorna ERROR_SUCCESS, essa variável contém o tamanho dos dados copiados para szResultBuf, não incluindo o caractere nulo de terminação. Se szResultBuf não for grande o suficiente, a função retornará ERROR_MORE_DATA e armazenará o tamanho necessário, não incluindo o caractere nulo de encerramento, na variável apontada por pcchResultBuf.

Valor de retorno

A função MsiFormatRecord retorna um dos seguintes valores:

Observações

A função MsiFormatRecord usa o processo de formato a seguir.

Os parâmetros que devem ser formatados são colocados entre colchetes [...]. Os colchetes podem ser iterados porque as substituições são resolvidas de dentro para fora.

Se uma parte da cadeia de caracteres estiver entre chaves { } e não contiver colchetes, ela ficará inalterada, incluindo as chaves.

Se uma parte da cadeia de caracteres estiver entre chaves { } e contiver um ou mais nomes de propriedade, e se todas as propriedades forem encontradas, o texto (com as substituições resolvidas) será exibido sem as chaves. Se alguma das propriedades não for encontrada, todos os textos nas chaves e nas chaves serão removidos.

Observe que, no caso de ações personalizadas de execução adiada, msiFormatRecord dá suporte apenas a propriedades CustomActionData e ProductCode. Para obter mais informações, consulte Obtendo informações de contexto para ações personalizadas de execução adiada.

As etapas a seguir descrevem como formatar cadeias de caracteres usando a função MsiFormatRecord:

Para formatar cadeias de caracteres usando a função MsiFormatRecord

  1. Os parâmetros numéricos são substituídos pela substituição do marcador pelo valor do campo de registro correspondente, por valores ausentes ou nulos que não produzem texto.
  2. A cadeia de caracteres resultante é processada substituindo os parâmetros não registrados pelos valores correspondentes, descritos em seguida.
    • Se uma subcadeia de caracteres do formulário "[propertyname]" for encontrada, ela será substituída pelo valor da propriedade.
    • Se uma subcadeia de caracteres do formulário "[%environmentvariable]" for encontrada, o valor da variável de ambiente será substituído.
    • Se uma subcadeia de caracteres do formulário" [#filekey]" for encontrada, ela será substituída pelo caminho completo do arquivo, pelo valor filekey usado como uma chave na tabela arquivo . O valor de "[#filekey]" permanece em branco e não será substituído por um caminho até que o instalador execute a ação CostInitialize, de ação FileCost e de ação CostFinalize. O valor de "[#filekey]" depende do estado de instalação do componente ao qual o arquivo pertence. Se o componente estiver sendo executado da origem, o valor será o caminho para o local de origem do arquivo. Se o componente estiver sendo executado localmente, o valor será o caminho para o local de destino do arquivo após a instalação. Se o componente estiver ausente, o caminho estará em branco. Para obter mais informações sobre como verificar o estado de instalação dos componentes, consulte Verificando a instalação de recursos, componentes, arquivos.
    • Se uma subcadeia de caracteres do formulário "[$componentkey]" for encontrada, ela será substituída pelo diretório de instalação do componente, com o valor componentkey usado como uma chave na tabela componente . O valor de "[$componentkey]" permanece em branco e não será substituído por um diretório até que o instalador execute a ação CostInitialize, de ação FileCost e ação CostFinalize. O valor de "[$componentkey]" depende do estado de instalação do componente. Se o componente estiver sendo executado da origem, o valor será o diretório de origem do arquivo. Se o componente estiver sendo executado localmente, o valor será o diretório de destino após a instalação. Se o componente estiver ausente, o valor será deixado em branco. Para obter mais informações sobre como verificar o estado de instalação dos componentes, consulte Verificando a instalação de recursos, componentes, arquivos.
    • Observe que, se um componente já estiver instalado e não estiver sendo reinstalado, removido ou movido durante a instalação atual, o estado de ação do componente será nulo e, portanto, a cadeia de caracteres "[$componentkey]" será avaliada como Null.
    • Se uma subcadeia de caracteres do formulário "[\c]" for encontrada, ela será substituída pelo caractere sem nenhum processamento adicional. Somente o primeiro caractere após a barra invertida ser mantida; todo o resto é removido.
Se ERROR_MORE_DATA for retornado, o parâmetro que é um ponteiro fornecerá o tamanho do buffer necessário para manter a cadeia de caracteres. Se ERROR_SUCCESS for retornado, ele fornecerá o número de caracteres gravados no buffer de cadeia de caracteres. Portanto, você pode obter o tamanho do buffer passando uma cadeia de caracteres vazia (por exemplo, "") para o parâmetro que especifica o buffer. Não tente determinar o tamanho do buffer passando um Nulo (valor=0).

Nota

O cabeçalho msiquery.h define MsiFormatRecord como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows Installer 5.0 no Windows Server 2012, Windows 8, Windows Server 2008 R2 ou Windows 7. Windows Installer 4.0 ou Windows Installer 4.5 no Windows Server 2008 ou Windows Vista.
da Plataforma de Destino Windows
cabeçalho msiquery.h
biblioteca Msi.lib
de DLL Msi.dll

Consulte também

passando nulo como o argumento do Windows Installer Functions