Partilhar via


Depuração de ações personalizadas

Você pode depurar ações personalizadas baseadas em bibliotecas de vínculo dinâmico usando Ferramentas de Depuração para Windows. Não é possível utilizar a depuração dinâmica com ações personalizadas baseadas em ficheiros executáveis ou em scripts .

As técnicas descritas nesta seção podem ajudá-lo a depurar ações personalizadas do Windows Installer. Consulte a seção Ferramentas de Desenvolvimento de Driver do Kit de Driver do Windows (WDK) para obter informações sobre Ferramentas de Depuração para Windows.

O Windows Installer usa a variável de ambiente MsiBreak para determinar qual ação personalizada deve ser depurada. Se você tiver acesso ao código-fonte da ação personalizada, poderá usar a depuração sem MsiBreak. Para iniciar a depuração sem MsiBreak, coloque uma caixa de mensagem temporária no início do código da ação. Quando a caixa de mensagem aparecer durante a instalação, anexe o depurador ao processo que possui a caixa de mensagem. Em seguida, você pode definir quaisquer pontos de interrupção necessários e descartar a caixa de mensagem para retomar a execução. Não é possível depurar as partes anteriores da ação personalizada por esse método.

Para usar a variável de ambiente MsiBreak para depurar a ação personalizada, defina MsiBreak como o nome da ação personalizada na tabela CustomAction. MsiBreak pode ser um sistema ou uma variável de ambiente do usuário. Se a variável for definida como uma variável de sistema, uma reinicialização do sistema pode ser necessária quando o valor for alterado para detetar o novo valor.

Para usar a variável de ambiente MsiBreak para depurar uma interface de usuário incorporada, defina o valor de MsiBreak como MsiEmbeddedUI.

O Windows Installer só verifica a variável de ambiente MsiBreak se o usuário for um administrador. O instalador ignora o valor de MsiBreak se o usuário não for um administrador, mesmo que este seja um aplicativo gerenciado .

Se você estiver depurando uma ação personalizada que é executada com privilégios elevados (sistema) na sequência de execução, anexe o depurador ao serviço Windows Installer. Ao depurar uma ação personalizada que é executada com privilégios representados na sequência de execução, o sistema exibe uma caixa de diálogo que indica qual processo deve ser depurado. O utilizador recebe uma caixa de diálogo indicando qual processo depurar. Para obter mais informações sobre ações personalizadas elevadas, consulte Segurança de Ações Personalizadas.

Uma vez que o depurador foi anexado ao processo correto, o instalador dispara um ponto de interrupção do depurador imediatamente antes de chamar o ponto de entrada da DLL. No ponto de interrupção, a sua DLL já está carregada no processo e o endereço do ponto de entrada está determinado. Se a DLL da ação personalizada não puder ser carregada ou se o ponto de entrada da ação personalizada não existir, nenhum ponto de interrupção será acionado. Como o ponto de interrupção é acionado antes de chamar a função DLL, uma vez que o ponto de interrupção tenha sido acionado, você deve usar o depurador para avançar até que o ponto de entrada de ação personalizada seja chamado. Como alternativa, você pode definir um ponto de interrupção em qualquer lugar em sua ação personalizada e retomar a execução normal.

O Windows Installer executa DLLs não armazenadas na tabela binária diretamente do local da DLL. O instalador não sabe o nome original de uma DLL armazenada na tabela binária e executa a ação personalizada DLL sob um nome de arquivo temporário. A forma do nome do arquivo temporário é MSI?????. TMP. No Windows XP, esse arquivo temporário é armazenado em um local seguro, geralmente <WindowFolder>\Installer.

Observe que muitas DLLs criadas para depuração contêm o nome e o caminho do arquivo PDB correspondente como parte da própria DLL. Ao depurar esse tipo de DLL em um sistema onde o PDB pode ser encontrado no local armazenado na DLL, os símbolos podem ser carregados automaticamente pela ferramenta de depurador. Em situações em que o PDB não pode ser encontrado no local armazenado, onde o depurador não suporta o carregamento de símbolos do local armazenado ou onde a DLL não foi criada com informações de depuração, talvez seja necessário colocar seus arquivos de símbolo na pasta com o arquivo DLL temporário.

O instalador adiciona informações de depuração para scripts de ação personalizados ao arquivo de log de instalação.

There is a problem with this Windows Installer package. A script 
required for this install to complete could not be run. Contact your 
support personnel or package vendor.  {Custom action [2] script error 
[3], [4]: [5] Line [6], Column [7], [8] }