Cómo descargar archivos DLL dependientes en Internet Explorer con un archivo .inf

Seleccione idioma Seleccione idioma
Id. de artículo: 165075 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

A menudo es necesario descargar los archivos DLL dependientes junto con un Control ActiveX. Los controles MFC y Visual Basic tienen este requisito. En este artículo se explica tres formas que puede hacer esto.

Más información

Hay tres formas de incluir archivos DLL dependientes en la descarga de un control. La primera forma consiste en incluir la de los archivos DLL en el archivo CAB para el control junto con los archivos OCX e INF. La desventaja de esto es que la DLL se descargarán cualquier momento que se descarga el control. En algunos casos, esto es adecuado. La siguiente consiste en empaquetar los archivos DLL dependientes en un archivo CAB independiente y hacer referencia a la en el archivo INF para el control. La tercera forma de paquetes también el archivo DLL en un archivo CAB independiente pero se hace referencia el archivo CAB en el archivo del control INF con un enlace. Utilizando un enlace permite que el proceso de descarga ejecutar un archivo INF o EXE incluido en el archivo CAB dependiente.

Para agregar una dependencia para un OCX (Simpdll.dll en este ejemplo), se agrega una sección similar a la sección para el control a la sección [AddCode] del archivo INF:
   [Add.Code]
   TestDw.ocx=TestDw.ocx
   simpdll.dll=simpdll.dll
				
sección se agrega al archivo INF para controlar la instalación de la DLL:
   [simpdll.dll]
   FileVersion=1,0,0,1
   file-win32-x86=thiscab
				
esta es la forma primera mencionada para incluir una dependencia DLL en una descarga.

Para incluir el archivo DLL en un archivo CAB independiente, todo lo que es necesario es cambiar la ubicación de "thiscab" a la dirección URL a la que se ubicará el CAB dependiente:
File-Win32-x86=http://www.contoso.com/Controls/Dependent.cab
En este caso, Simpdll.cab contiene sólo simpdll.dll.

Varios archivos DLL pueden agregarse a los archivos CAB y INF anterior si es necesario.

La tercera forma de empaquetar archivos DLL dependientes es hacer referencia a archivo CAB de la DLL dependientes mediante un enlace. Con esta técnica se puede ejecutar un archivo INF o EXE del proyecto CAB dependientes en la descarga.

La siguiente sección de un archivo .inf controla la descarga DLL dependiente para controles MFC:
   [Add.Code]
   ...
   msvcrt.dll=msvcrt.dll
   mfc42.dll=mfc42.dll
   olepro32.dll=olepro32.dll

   [msvcrt.dll]
   FileVersion=4,20,0,6164
   hook=mfc42installer

   ...

   [mfc42installer]
   file-win32-x86=http://activex.microsoft.com/controls/vc/mfc42.cab
   run=%EXTRACT_DIR%\mfc42.exe
				
en este caso, en que los archivos DLL de MFC están empaquetadas en un archivo de .exe autoextraíble, que se encuentra en el archivo .cab (mfc42.cab). Sin embargo, las herramientas para que los archivos .exe autoextraíble no están disponibles actualmente de Microsoft. Por lo tanto, podrá ser necesario empaquetar archivos DLL dependientes con un archivo .inf o hacer referencia al archivo .inf en el enlace de instalación:
   [yourinstaller]
   file-win32-x86=http://example.microsoft.com/simpdll.cab
   InfFile=your.inf
				
o tendrá que generar un self extraer el archivo EXE mediante herramientas de terceros.

Para ilustrar, ésta es el archivo .inf utilizado para instalar los archivos DLL dependientes de MFC. Puede modificar esta opción para instalar sus propios archivos DLL de la misma manera que están instaladas los archivos DLL de MFC.
   ; ========================= Mfc42.inf =========================

   ; This file will control the download of the MFC 4.2 DLLs

   [version]
   ; version signature (same for both NT and Win95) do not remove
   signature="$CHICAGO$"
   AdvancedINF=2.0

   [SourceDisksNames]
   ; This section specifies that all sources are in the "default"
   ; location.
   1="default",,1

   [DefaultInstall]
   ; Default section to process and copy all files under the section
   ; mfcdllsx.files and Register DLLs under the section mfcdllsx.register.
   CopyFiles=mfcdllsx.files
   RegisterOCXs=mfcdllsx.register

   [DestinationDirs]
   ; Destination Directories for CopyFiles Sections.
   ; 11 indicates LDID_SYS - system directory
   mfcdllsx.files=11

   [mfcdllsx.files]
   ; ,,,32 - Suppress version conflict dialog and don't overwrite newer
   ; DLLs
   msvcrt.dll,,,32
   mfc42.dll,,,32
   olepro32.dll,,,32

   [mfcdllsx.register]
   ; msvcrt.dll is not self registering
   %11%\mfc42.dll
   %11%\olepro32.dll

   ; ====================== Mfc42.inf ======================
				
A DLL debe estar incluido en la sección .Register si exporta una función DllRegisterServer. Esto puede determinarse examinando el archivo DLL con DUMPBIN.exe utilidad del compilador Visual C. También puede ejecutar Regsvr32 en la DLL, que intenta registrar la DLL. Regsvr32 se carga la DLL, se comprueba que se exporta correctamente DllRegisterServer llamando GetProcAddress() en la función DLLRegisterServer. Si lo consigue, la función DllRegisterServer se exporta y, a continuación, se llama.

Sin embargo, tenga en cuenta que está ejecutando Regsvr32 en el archivo DLL puede tener efectos colaterales no deseados. Cuando se llama a DllRegisterServer, facilita las entradas apropiadas del Registro señala a la ubicación de la DLL en el equipo. Por ejemplo, escriba lo siguiente en un símbolo de MS-DOS, con fines de prueba, puede causar problemas:
   copy mfc42.dll C:\Test
   run "D:\msdev\bin\REGSVR32.EXE C:\Test\mfc42.dll"
   delete mfc42.dll
				
la próxima vez que el sistema intenta buscar Mfc42.dll, busca el registro, encuentra que el archivo se asigna a C:\Test\Mfc42.dll y no lo encuentra allí. Ejecutando Regsvr32 en un archivo que ya está instalado en un equipo no causa problemas.

Instalar un archivo DLL con un enlace y un self extraer EXE resulta útil para la siguiente razón: si ya está cargado un archivo DLL que debe actualizarse en memoria, se producirá la descarga. Éste es un problema conocido, que se ha corregido en Internet Explorer versión 4.0. Internet Explorer 4.0 se sugiera un reinicio y el nuevo archivo DLL de carga durante el reinicio.

Referencias

Para obtener información adicional, consulte en contacto con los artículos siguientes en Microsoft Knowledge Base:
167158Cómo controles MFC de paquete para su uso a través de Internet
167597Especificar FileVersion y # Version para descarga de componentes

Para obtener más información, vea el Webcast siguiente:
How Does Internet Component Download Work?

Propiedades

Id. de artículo: 165075 - Última revisión: jueves, 21 de diciembre de 2006 - Versión: 2.5
La información de este artículo se refiere a:
  • Microsoft Internet Explorer 3.0
  • Microsoft Internet Explorer 3.01
  • Microsoft Internet Explorer 3.02
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.5
  • Windows Internet Explorer 8
  • Windows Internet Explorer 8 on Windows Server
Palabras clave: 
kbmt kbcode kbdownload kbfaq kbhowto KB165075 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 165075

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com