Opções de agendamento de execução de ação personalizada
Como uma ação personalizada pode ser agendada na interface do usuário e executar tabelas de sequência e pode ser executada no processo de serviço ou cliente, ela pode potencialmente ser executada várias vezes.
Observe que o instalador:
- Executa ações em uma tabela de sequência imediatamente por padrão.
- Não executa uma ação se o campo de expressão condicional da tabela de sequência for avaliado como False.
- Processa a tabela de sequência de interface do usuário no processo do cliente se o nível de interface do usuário interno estiver definido como o modo de interface do usuário completo (consulte MsiSetInternalUI para obter uma descrição dos níveis de interface do usuário).
- É um serviço registrado por padrão ao usar o Windows 2000 e, nesse caso, a tabela de sequência de execução é processada no serviço do instalador.
Você pode usar os sinalizadores de opção a seguir para controlar várias execuções imediatas de ações personalizadas. Para definir uma opção, adicione o valor nesta tabela ao valor no campo Type da tabela CustomAction. Nenhum dos sinalizadores a seguir deve ser usado com ações personalizadas de execução adiada.
-
(padrão)
-
Hexadecimal: 0x00000000
Decimal: 0
Sempre execute. A ação pode ser executada duas vezes se estiver presente em ambas as tabelas de sequência.
-
msidbCustomActionTypeFirstSequence
-
Hexadecimal: 0x00000100
Decimal: 256
Execute não mais de uma vez se estiver presente em ambas as tabelas de sequência. Sempre ignora a ação na sequência de execução se a sequência de interface do usuário tiver sido executada. Nenhum efeito na sequência de interface do usuário. Não é necessário que a ação esteja presente ou seja executada na sequência de interface do usuário que será ignorada na sequência de execução. Não afetado pela instalação do registro do serviço.
-
msidbCustomActionTypeOncePerProcess
-
Hexadecimal: 0x00000200
Decimal: 512
Execute uma vez por processo se estiver em ambas as tabelas de sequência. Ignora a ação na sequência de execução se a sequência de interface do usuário tiver sido executada no mesmo processo, por exemplo, ambos são executados no processo do cliente. Usado para impedir que ações que modifiquem o estado da sessão, como dados de propriedade e banco de dados, sejam executadas duas vezes.
-
msidbCustomActionTypeClientRepeat
-
Hexadecimal: 0x00000300
Decimal: 768
Execute somente se estiver em execução no cliente após a execução da sequência de interface do usuário. A ação será executada somente se a sequência de execução for executada no cliente após a sequência de interface do usuário. Pode ser usado para fornecer lógica ou para suprimir o processamento relacionado à interface do usuário, se já tiver sido feito para a sessão do cliente.
Observe que para executar uma ação personalizada durante dois modos de execução diferentes, crie duas entradas na tabela CustomAction. Por exemplo, para ter uma ação personalizada que chame uma DLL (biblioteca de vínculo dinâmico) C/C++ (Tipo de Ação Personalizada 1) quando o modo é MSIRUNMODE_SCHEDULED e MSIRUNMODE_ROLLBACK, coloque duas entradas na tabela CustomAction que chamam a mesma DLL, mas que têm tipos numéricos diferentes. Inclua o código que chama MsiGetMode para determinar quando executar qual ação personalizada.
Tópicos relacionados