lunes, 16 de mayo de 2011

ARCHIVOS DLL

QUE SON LOS ARCHIVOS DLL?


DLL – Dynamic Link Library (“Biblioteca de Vínculos Dinámicos”) es un archivo que contiene funciones que se pueden llamar desde aplicaciones u otras DLL. Los desarrolladores utilizan las DLL para poder reciclar el código y aislar las diferentes tareas. Las DLL no pueden ejecutarse directamente, es necesario llamarlas desde un código externo.

Un archivo DLL, 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 también 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 automáticamente 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; también 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 cópielo 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 su 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. Únicamente los paquetes de actualización del sistema operativo con los SP (Service Packs) pueden hacer esto.

Los archivos DLL del sistema que pueden ser únicamente 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 idéntico a uno protegido en el directorio del sistema, el reemplazo del archivo DLL, aparentemente, parecerá que es correcta y no veremos ningún 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 usada 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 versión x.x y la SA.DLL versión y.y. Para hacer esto, mi instalador del producto copia Wilkinsonpc.exe, MSVCRT.DLL versión x.x y SA.DLL versión y.y en la carpeta .\Wilkinsonpc. Además 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 actualicen al MSVCRT.DLL no harán fallar a la aplicación debido a que Wilkinsonpc.exe no utiliza la versión 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 también DLLs únicas, debido a que utiliza una copia privada de esa DLL en lugar de la genérica. Si ejecutamos 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, podríamos registrar cada DLL o componente de la aplicación en el directorio de la aplicación en donde queremos que resida la copia privada.

Existe un segundo método 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 vacío en ese directorio llamado Wilkinsonpc.exe. local. De esta manera 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 versión específica (en nuevas aplicaciones) y .local (en viejas aplicaciones) tienen las siguientes características:


  • Los archivos DLL que están en el directorio de la aplicación son cargados en lugar de los archivos DLL del sistema, aun 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.

Descargar archivos DLL:




DLL SEGÚN WIKIPEDIA

Una biblioteca de enlace dinámico o más comúnmente DLL (sigla en inglés de dynamic-link library) es el término con el que se refiere a los archivos con código ejecutable que se cargan bajo demanda de un programa por parte del sistema operativo. Esta denominación es exclusiva a los sistemas operativos Windows siendo ".dll" la extensión con la que se identifican estos ficheros, aunque el concepto existe en prácticamente todos los sistemas operativos modernos.

Ventajas


Las DLL son o se pueden ver como la evolución de las bibliotecas estáticas (en diversos sistemas) y de forma análoga contienen funcionalidad o recursos que utilizan otras aplicaciones. Sin embargo, su uso proporciona algunas ventajas:

  • Reducen el tamaño de los archivos ejecutables: Gran parte del código puede estar almacenado en bibliotecas y no en el propio ejecutable lo que redunda en una mejor modularización.
  • Pueden estar compartidas entre varias aplicaciones: Si el código es suficientemente genérico, puede resultar de utilidad para múltiples aplicaciones (por ejemplo, la MFC es una biblioteca dinámica con clases genéricas que recubren la API gráfica de Windows y que usan gran parte de las aplicaciones).
  • Facilitan la gestión y aprovechamiento de la memoria del sistema: La carga dinámica permite al sistema operativo aplicar algoritmos que mejoren el rendimiento del sistema cuando se carguen estas bibliotecas. Además, al estar compartidas, basta con mantener una copia en memoria para todos los programas que la utilicen.
  • Brindan mayor flexibilidad frente a cambios: Es posible mejorar el rendimiento o solucionar pequeños errores distribuyendo únicamente una nueva versión de la biblioteca dinámica. Nuevamente, está corrección o mejora será aprovechada por todas las aplicaciones que compartan la biblioteca.

Infierno de las DLL


Sin embargo, no todo son ventajas. En los sistemas Windows, las DLL son muy comunes y muchos programas usan las mismas bibliotecas de enlace dinámico. Pero debido a la evolución, cada una de las bibliotecas evoluciona incorporándose mejoras pero modificándolas de tal forma que dejan de ser compatibles. Esto puede producir dos efectos no deseados:

  • Que la instalación de un programa reemplace una DLL con una nueva versión incompatible.
  • Que la desinstalación del programa borre una DLL compartida.

En ambos casos, el resultado es que dejan de funcionar los programas que utilizaban la vieja versión. Estos problemas se denominaron el infierno de las DLL.

Las versiones modernas de Windows y los nuevos scripts de instalación MSI (sobre todo su característica de instalaciones residentes) abordan y resuelven este problema. Sin embargo, el problema persiste cuando se utilizan otros instaladores (versiones antiguas) o se realizan modificaciones manuales.


1 comentario:

  1. Wynn Slots Casino: 50 Free Spins No Deposit
    Play free 동두천 출장샵 Vegas slot machines online with 50 안성 출장샵 free 이천 출장안마 spins no deposit needed for US 전라북도 출장마사지 Players. No deposits 남원 출장샵 required, just start playing!

    ResponderEliminar