Confidencial de WindowsHuida del infierno de DLL

Raymond Chen

EL INFIERNO DE DLL. Se trata de un problema tan perjudicial que tiene su propio apodo despectivo. Al instalar un programa, otro programa aparentemente sin relación deja de funcionar. La razón, desconocida para el usuario corriente, es que dichos programas están conectados mediante un archivo DLL. Ambos programas pueden tener ideas diferentes de la versión del archivo MSVCRT.DLL que debe estar instalado en el directorio de sistema. O bien el primer programa puede actualizar un control ActiveX® que el segundo programa usa (una actualización con la que el segundo programa no es totalmente compatible).

Si los dos programas son vitales en las operaciones diarias de la compañía, no es importante saber qué programa es responsable del error. Lo importante es que necesita que ambos estén actualizados y en funcionamiento. La diferencia entre "Estamos perdiendo dinero" y "Estamos perdiendo dinero por culpa de Bob" no es muy grande. En cualquier caso, se producen pérdidas en la compañía y debe solucionar el problema inmediatamente.

Anteriormente se decidía entre el programa mejor y el peor. Comencemos con Windows® 2000, se ponen las vendas a disposición del usuario para ayudarle a solucionar los conflictos. Sin embargo, estas vendas son sólo soluciones temporales que permiten volver a activar el sistema mientras busca una solución definitiva al conflicto.

Windows 2000 implementó una versión básica de lo que ahora se conoce con el nombre de redirección de biblioteca de vínculos dinámicos. Para habilitar la redirección de DLL, cree un archivo con el mismo nombre del programa cuyos archivos DLL desee redireccionar, pero con .local agregado al nombre. Por ejemplo, para aplicar la redirección a C:\Archivos de programa\Litware Inc\Invoice.exe, cree el archivo C:\Archivos de programa\Litware Inc\Invoice .exe.local. El contenido del archivo no es relevante; lo que importa es que el archivo exista.

Una vez que ha habilitado la redirección para un programa, cada vez que ese programa intente cargar una DLL buscará primero en el directorio que contiene el programa antes que en las ubicaciones de búsqueda habituales. Por lo tanto, en el caso del archivo MSVCRT.DLL conflictivo, puede habilitar la redirección en cada programa y poner una copia privada del archivo MSVCRT.DLL en el directorio de instalación de cada uno de los programas. A continuación, cada programa recibirá una versión propia de MSVCRT.DLL (la versión de la DLL con la que se probó el programa).

La ventaja de esta técnica es que funciona aunque el programa utilice una ruta completa para cargar la DLL. Por ejemplo, imagine que el programa intenta cargar C:\Archivos de programa\Archivos comunes\Proseware Inc\taxplugin.dll. Después de realizar la actualización a Proseware 2.0, descubre que el complemento sobre impuestos no es compatible con el programa de facturas. Puede copiar una versión anterior del complemento sobre impuestos en C:\Archivos de programa\Litware Inc\taxplugin.dll. Aunque el programa use una ruta completa para cargar dicho complemento, la redirección de DLL seguirá buscando en el directorio actual y usará la invalidación local en lugar de la ubicada en el directorio de Proseware Inc.

En Windows XP y Windows Vista™, las reglas para la redirección de DLL son ligeramente diferentes, pero el principio general se mantiene. Además de crear un archivo .local, puede crear también un directorio .local. En tal caso, se realizará la búsqueda en el directorio .local en lugar de en el directorio de instalación del programa. Esto le permite aplicar la redirección a varios programas en el mismo directorio sin problemas.

Tenga en cuenta que no puede aplicar la redirección a programas que contengan un manifiesto de aplicación, ni a las denominadas DLL. Para obtener más detalles, consulte "Redirección de biblioteca de vínculos dinámicos" (en inglés).

La redirección de DLL no le librará completamente del infierno de DLL, pero le proporcionará técnicas de primeros auxilios para desinfectar la herida mientras soluciona definitivamente el problema.

Figura 1

Figura 1   

Raymond Chen escribe acerca de la historia de Windows y la programación de Win32 en su sitio web, The Old New Thing (en inglés), así como en su libro nuevo titulado The Old New Thing (Addison-Wesley, 2007). Sin embargo, no tiene ningún gato que se llame The Old New Thing.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.