miércoles, 9 de septiembre de 2009

Que son los archivos DLL?


Un archivo DLL (Dynamic Library Link) es un módulo componente de un programa que ejecuta alguna función. Estos archivos DLL son muy útiles, pero también suelen ser causa de errores en Windows.
Los archivos DLL ejecutan acciones o rutinas de uso frecuente en Windows, y un mismo archivo DLL puede ser usado por varios programas al mismo tiempo (como el Kernel32.dll). Por ejemplo el procesador de palabras, la hoja de cálculo y otros programas pueden usar un mismo archivo DLL para desplegar el cuadro diálogo Abrir, cada vez que usted usa el comando Abrir.
Gracias a ese esquema modular (que tambien se usa en el sistema operativo OS/2), hay muchas funciones que los creadores de software no tienen que incluir en sus programas; cuando un programa necesita enviar un documento a la impresora, simplemente llama el archivo DLL respectivo (que ya Windows instaló) para que este cargue y ejecute la tarea. De esa forma, los programas son más pequeños y se ahorra espacio en el disco duro.
El hecho de que estos módulos de rutinas (Archivos DLL) no sean parte de programas, sino que se guardan como archivos independientes, también optimiza el uso de la memoria RAM. Un DLL se carga en la memoria RAM y se ejecuta únicamente cuando un programa lo llama para que realice una función, mientras que otros módulos de rutinas que sí hacen parte del programa permanecen cargados en la memoria mientras trabaja con un programa.
Windows incluye muchos archivos DLL que son usados por otros programas (la mayoría en la carpeta c:\windows\system). Pero algunos programas también instalan sus propios archivos DLL (y generalmente los colocan en la carpeta del disco duro en la que está guardado dicho programa).
Observaciones en el manejo de DLL
Como diferentes programas deben compartir los mismo DLL, si algunos programas no respetan ciertas reglas del juego se pueden producir errores. A veces uno instala programas que colocan una versión vieja de un archivo DLL en la carpeta
c:\windows\system y remplazan -sin avisar- la versión más reciente del mismo DLL. Al hacer eso, es posible que se produzcan fallas en los programas que usaban la versión más reciente del DLL.
Nota: En Windows XP no es posible reemplazar un archivo dll del sistema, ya que este se dará cuenta y automaticamente copiara el DLL correcto de su base de datos, Windows XP se protege de esta manera para evitar conflictos.
No todos los archivos DLL tienen extensión .dll; tambien hay archivos del mismo tipo con extensiones .ocx, .exe, .drv, .vxd, etc.


Cuando Windows le muestre un mensaje de error que dice que le falta un DLL, anote el nombre exacto del archivo (incluyendo la extensión), busque el archivo en cualquiera de los sitios que al final se recomiendan, bájelo y copiélo en la carpeta en la que lo está buscando el programa que generó el mensaje de error (probablemente c:\windows\system o la carpeta en la que está almacenado el programa).
Tenga en cuenta que puede haber versiones diferentes de Archivos DLL, pero con un nombre idéntico. Se recomienda no remplazar un DLL por una versión más vieja (para saber que versión tiene un DLL, busque el archivo, dé click derecho sobre él, seleccione propiedades y de click en la pestaña Versión). Lo mejor es que siempre guarde en un diskette o alguna parte de sus disco duro el DLL que va a reemplazar (incluso aunque sea de una versión más vieja). Uno nunca sabe qué programa lo pueda necesitar.
Windows File Protection [WFP]
Windows FIle Protection (WFP) protege los archivos DLL del sistema de ser actualizadas o borradas por agentes no autorizados. Las aplicaciones no pueden sustituir las DLLs del sistema. Unicamente los paquetes de actualizacion del sistema operativo com los SP (Service Packs) pueden hacer esto.
Los archivos DLL del sistema que pueden ser unicamente actualizadas por los Service Pack (SP) se denominan DLLs protegidas. Hay aproximadamente 2800 DLLs protegidas en Windows 2000 y XP.
Si intentamos copiar un archivo DLL identico a uno protegido en el directorio del sistema, el reemplazo del archivo DLL, aparentemente, parecerá que es correcta y no veremos ningun mensaje de error. Pero Windows 2000 y XP recuperarán el archivo DLL recientemente copiado con el archivo DLL original silenciosamente.
WFP elimina completamente los errores de los archivos DLL y además minimiza los problemas causados por instalación y/o actualización de aplicaciones.
System File Checker (sfc)Tip: Para comprobar que los archivos de tu sistema estan en perfecto estado y completos, ejecuta esta instruccion:
En Windows XP: Ve a Inicio > Ejecutar y escribe esto "sfc /scannow" (sin las comillas).
Al ejecutar este proceso es posible que se le pida introducir el CD de instalación de Windows XP.
DLL's Privadas
Las DLLs privadas son DLLs que son instaladas con una aplicación específica y usadas solo por esa aplicación.
Por ejemplo, supongamos que yo soy el responsable de un programa llamada Wilkinsonpc.exe. Yo he 'testeado' ese programa con una versión x.x de la librería de Microsoft MSVCRT.DLL y una versión y.y de la SA.DLL (por ejemplo, SA.DLL no es una DLL de Microsoft, pero es una DLL de terceros distribuida con otras varias aplicaciones). Yo quiero asegurarme que mi programa Wilkinsonpc.exe siempre usará la MSVCRT.DLL version x.x y la SA.DLL version y.y. Para hacer esto, mi instalador del producto copia Wilkinsonpc.exe, MSVCRT.DLL version x.x y SA.DLL version y.y en la carpeta .\Wilkinsonpc. Ademas debo notificar a Windows 2000, que Wilkinsonpc.exe debe utilizar esas DLLs privadas y unicamente esas (esto no es posible con Windows 95/98 ó ME). Cuando Wilkinsonpc.exe se ejecuta en Windows 2000 ó XP, este va a mirar en la carpeta .\Wilkinsonpc para localizar las DLLs de version específica antes de mirar en las carpetas del sistema y en el path.
Los Service Packs futuros que actualizen al MSVCRT.DLL no harán fallar a la aplicacion debido a que Wilkinsonpc.exe no utiliza la version compartida de MSVCRT.DLL. Otras aplicaciones que instalen diferentes versiones de SA.DLL tampoco afectarán a Wilkinsonpc.exe debido a que este, tiene su versión privada de SA.DLL.
Las DLLs privadas, se las denomina tambien DLLs unicas, debido a que utiliza una copia privada de esa DLL en lugar de la generica. Si ejecuitamos por ejemplos WordPad y Wilkinsonpc concurrentemente, dos copias de la MSVCRT.DLL serán cargadas en memoria.
Por tanto, como autores de la aplicación, podriamos registrar cada DLL o componente de la aplicacion en el directorio de la aplicacion en donde queremos que resida la copia privada.
Existe un segundo metodo que puede ser utilizado en aplicaciones ya existentes. Supongamos que c:\Wilkinsonpc\Wilkinsonpc.exe es una aplicación existente y que la queremos proteger de futuras actualizaciones de DLLs o incluso de actualizaciones debidas a los Service Packs. Simplemente copiamos las DLLs que queremos que sean privadas a Wilkinsonpc.exe a la carpeta .\Wilkinsonpc y creamos un archivo vacio en ese directorio llamado Wilkinsonpc.exe.local. De esta manerá el sistema sabe que cuando Wilkinsonpc.exe quiera cargar una DLL, debe buscarla siempre primero en donde esté ese archivo .local y buscará por tanto las DLLs y servidores COM en dicho directorio antes que en el path especifico de Windows.
Ambas soluciones, la version específica (en nuevas aplicaciones) y .local (en viejas aplicaciones) tienen las siguientes caracteristicas: Los archivos DLL que están en el directorio de la aplicación son cargados en lugar de los archivos DLL del sistema, aún cuando la función "LoadLibrary" de la aplicación tenga el camino 'hard-coded'. No es posible redirigir la 20 KnownDLLs (conocidas DLLs), que están referenciadas en HKEY_LOCAL_MACHINE\SYSTEM\CurrentoControlSet\Control\SessionManager\KnownDLLs. Estas no pueden rodar independientemente ya que necesitan mantener estados de procesos cruzados. Por ejemplo: kernel32, user32 y ole32 no pueden ser redirigidas debido a que tienen estados (objetos del kernel, manejadores de ventanas) que necesitan existir a lo largo de todos los procesos. En futuras versiones del sistema operativo estas limitaciones quedarán mas restringidas. [ Bajar / Descargar archivos DLL ] [ Instalar/Agregar ó Quitar/Eliminar archivos DLL ]

No hay comentarios: