¿ Qué 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).
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.
¿ Como Agregar / Instalar o Quitar / Desregistrar
archivos .dll ó .ocx ?
Para agregar ciertos archivos .ocx y/o .dll, abra una ventana de comandos
En Windows 98/ME: Vaya a Inicio > Ejecutar escriba esto "command.com" (sin las comillas)
En Windows NT/2000/XP: Vaya a Inicio > Ejecutar escriba esto "cmd" (sin las comillas)
Navegue a traves de los directorios hasta llegar a la carpeta que contiene el archivo DLL que desee instalar/registrar o desinstalar/desregistrar.
El siguiente es el comando que necesitaras ejecutar para instalar/registrar:
regsvr32 [nombre.dll] ó [nombre.ocx]
Ejemplo: regsvr32 msvcp60.dll
Para desinstalar/desregistrar un archivo DLL u OCX:
regsvr32 /u [nombre.dll] ó [nombre.ocx]
Ejemplo: regsvr32 /u msvcp60.dll
|