Compartilhar via


Como depurar ações personalizadas

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

As técnicas descritas nesta seção podem ajudá-lo a depurar ações personalizadas do Windows Installer. Confira a seção Ferramentas de Desenvolvimento de Driver do WDK (Windows Driver Kit) para obter informações sobre as 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 o MsiBreak. Para iniciar a depuração sem o MsiBreak, coloque uma caixa de mensagem temporária no início do código da ação. Quando a caixa de mensagem for exibida durante a instalação, anexe o depurador ao processo que possui a caixa de mensagem. Em seguida, você pode definir os pontos de interrupção necessários e ignorar 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 do MsiBreak para depurar a ação personalizada, defina MsiBreak como o nome da ação personalizada na tabela CustomAction. O MsiBreak pode ser um sistema ou uma variável de ambiente de usuário. Se a variável for definida como uma variável do sistema, uma reinicialização do sistema poderá ser necessária quando o valor for alterado para detectar o novo valor.

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

O Windows Installer verifica apenas a variável de ambiente do MsiBreak se o usuário for um Administrador. O instalador ignorará o valor do MsiBreak se o usuário não for um Administrador, mesmo que esse seja um aplicativo gerenciado.

Se você estiver depurando uma ação personalizada 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 executada com privilégios representados na sequência de execução, o sistema pergunta por meio de uma caixa de diálogo qual processo deve ser depurado. O usuário é solicitado por meio de uma caixa de diálogo qual processo deve ser depurado. Para obter mais informações sobre ações personalizadas elevadas, confira Segurança de Ação Personalizada.

Depois que o depurador tiver sido anexado ao processo correto, o instalador disparará um ponto de interrupção do depurador imediatamente antes de chamar o ponto de entrada da DLL. No ponto de interrupção, sua DLL já está carregada no processo e o endereço do ponto de entrada determinado. Se a DLL de ação personalizada não puder ser carregada ou o ponto de entrada de ação personalizada não existir, nenhum ponto de interrupção será disparado. Como o ponto de interrupção é disparado antes de chamar a função DLL, depois que o ponto de interrupção for disparado, você deverá 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 Binary diretamente do local da DLL. O instalador não sabe o nome original de uma DLL armazenada na tabela Binary e executa a ação personalizada da DLL em 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, normalmente <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 no qual o PDB pode ser encontrado no local armazenado na DLL, os símbolos podem ser carregados automaticamente pela ferramenta de depuração. Em situações em que o PDB não pode ser encontrado no local armazenado, no qual o depurador não dá suporte ao carregamento de símbolos do local armazenado ou no qual 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] }