Confidencialidade do WindowsSaindo do inferno da DLL

Raymond Chen

INFERNO DA DLL. Um problema tão traiçoeiro que tem seu próprio apelido pejorativo. Você instala um programa e, de repente, algum programa não diretamente relacionado deixa de funcionar. Isso é porque, embora você desconheça, os dois programas estão conectados por um arquivo DLL compartilhado. Os dois programas podem ter idéias diferentes sobre qual versão do arquivo MSVCRT.DLL deve existir no diretório do sistema. Ou o primeiro programa pode fazer uma atualização do controle ActiveX® usado pelo segundo – uma atualização com a qual o segundo programa não seja inteiramente compatível.

Se ambos os programas são essenciais para as operações diárias de sua empresa, realmente não importa culpar os programas. O importante é que você precisa recuperá-los e colocá-los em execução. Não há muita diferença entre "Estamos perdendo dinheiro" e "Estamos perdendo dinheiro por causa do Bob". De qualquer modo, sua empresa está perdendo dinheiro e cabe a você resolver o problema imediatamente.

Antigamente, você escolhia qual programa vencia e qual perdia. Após o Windows® 2000, os paliativos foram disponibilizados para ajudá-lo a reparar tais conflitos. Esses paliativos, no entanto, são apenas soluções temporárias, que permitem a você recuperar seu sistema enquanto investiga uma solução mais permanente para o conflito.

O Windows 2000 implementou uma versão rudimentar do que atualmente é denominado charmosamente de Redirecionamento de biblioteca de link dinâmico. Para habilitar o redirecionamento de DLL, crie um arquivo com o mesmo nome que o programa cujas DLLs deseja redirecionar, mas com .local anexado ao nome. Por exemplo, para aplicar redirecionamento para C:\Arquivos de programas\Litware Inc\Invoice.exe, crie o arquivo C:\Arquivos de programas\Litware Inc\Invoice .exe.local. O conteúdo do arquivo não é importante, o importante é que o arquivo exista.

Após habilitar o redirecionamento de um programa, todas as tentativas feitas por esse programa para carregar uma DLL serão examinadas no diretório em que ele está contido antes de ser feita nos locais de pesquisa usuais. Portanto, no caso de o arquivo MSVCRT.DLL ser conflitante, você pode habilitar o redirecionamento em cada programa e fazer uma cópia particular do MSVCRT.DLL no diretório de instalação de cada programa. Depois, cada programa recebe sua própria versão do MSVCRT.DLL – a versão da DLL de teste do programa.

A mágica desta técnica é que ela funciona mesmo se o programa usar um caminho completo para carregar a DLL. Por exemplo, suponha que o programa tente carregar o arquivo de C:\Arquivos de programas\Arquivos comuns\Proseware Inc\taxplugin.dll. Após a atualização para o Proseware 2.0, você descobre que seu plug-in de imposto é incompatível com o programa de emissão de faturas. O que você pode fazer é copiar uma versão antiga do plug-in de imposto em C:\Arquivos de programas\Litware Inc\taxplugin.dll. Embora o programa utilize um caminho completo para carregar o plug-in de imposto, o redirecionamento de DLL ainda examinará o diretório atual e utilizará a substituição de local em vez daquela existente no diretório Proseware Inc.

No Windows XP e no Windows Vista™, as regras para redirecionamento de DLL são um pouco diferentes, mas o princípio geral é o mesmo. Além de criar um arquivo .local, você também pode criar um diretório .local. Nesse caso, o diretório .local é pesquisado em vez de ser pesquisado o diretório de instalação do programa. Isso permite a aplicação do redirecionamento de vários programas no mesmo diretório sem conflito.

Observe que não é possível aplicar redirecionamento a programas que contêm manifesto do aplicativo e as conhecidas DLLs representam também uma isenção de redirecionamento. (Para obter mais detalhes, consulte "Dynamic-Link Library Redirection") (em inglês).

O redirecionamento de DLL não desaparecerá completamente com o inferno da DLL, mas pelo menos apresentará a você algumas técnicas de primeiros-socorros para tentar ajudá-lo enquanto resolve o problema.

Figura 1

Figura 1   

Raymond Chen escreve sobre a história do Windows e da programação Win32 em seu site, The Old New Thing (em inglês), bem como em seu novo livro também intitulado The Old New Thing (Addison-Wesley, 2007). Porém, ele não tem um gato de estimação chamado The Old New Thing.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..