Compartilhar via


Como acessar a sessão do instalador atual em uma ação personalizada

As ações personalizadas não inferidas que chamam bibliotecas de vínculo dinâmico ou scripts podem acessar uma instalação em execução para consultar ou modificar os atributos da sessão de instalação atual. Somente um objeto Session pode existir para cada processo, e os scripts de ação personalizada não devem tentar criar outra sessão.

As ações personalizadas só podem adicionar, modificar ou remover linhas, colunas ou tabelas temporárias de um banco de dados. As ações personalizadas não podem modificar dados persistentes em um banco de dados, por exemplo, dados que fazem parte do banco de dados armazenado em disco.

Bibliotecas de vínculo dinâmico

Para acessar uma instalação em execução, as ações personalizadas que chamam as DLL (bibliotecas de vínculo dinâmico) recebem um identificador do tipo MSIHANDLE para a sessão atual como o único argumento para o ponto de entrada DLL chamado na coluna Target da tabela CustomAction. Como o instalador fornece esse identificador, a ação personalizada não deve fechá-lo. Por exemplo, para receber o identificador hInstall do instalador, a função de ação personalizada é declarada conforme mostrado a seguir.

UINT __stdcall CustomAction(MSIHANDLE hInstall)

Para o acesso somente leitura ao banco de dados atual, obtenha o identificador de banco de dados chamando MsiGetActiveDatabase. Para obter mais informações, confira Como obter um identificador de banco de dados.

Scripts

As ações personalizadas escritas em VBScript ou JScript podem acessar a sessão de instalação atual por meio do objeto Session. O instalador cria um objeto Session chamado "Session" que referencia a instalação atual. Para o acesso somente leitura ao banco de dados atual, use a propriedade Database do objeto Session.

Como um script é executado no contexto do objeto Session, nem sempre é necessário qualificar totalmente as propriedades e os métodos. No exemplo a seguir, ao usar o VBScript, a referência Me pode substituir o objeto Session, por exemplo, as três linhas a seguir são equivalentes.

Session.SetInstallLevel 1
Me.SetInstallLevel 1
SetInstallLevel 1

Arquivos executáveis

Não é possível acessar a sessão atual do instalador por meio de ações personalizadas que chamam arquivos executáveis iniciados com uma linha de comando, por exemplo, Tipo de Ação Personalizada 2 e Tipo de Ação Personalizada 18.

Ações personalizadas de execução adiada

Não é possível acessar a sessão atual do instalador ou todos os dados de propriedade por meio de uma ação personalizada de execução adiada. Para obter mais informações, confira Como obter informações de contexto para ações personalizadas de execução adiada.

Como acessar um banco de dados ou uma sessão em uma ação personalizada