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


Resumen


A menudo es necesario descargar los archivos DLL dependientes junto con un control ActiveX. Los controles de MFC y Visual Basic tienen este requisito. En este artículo, se explicarán tres formas de hacerlo.

Más información


Hay tres formas de incluir archivos DLL dependientes en la descarga de un control. La primera es incluir los archivos DLL en el archivo CAB para el control junto con los archivos OCX e INF. La desventaja es que la DLL se descargará en cualquier momento en que se descargue el control. En algunos casos, es adecuado. La siguiente forma de empaquetar los archivos DLL dependientes en un archivo CAB independiente y hacer referencia a ellos en el archivo INF del control. La tercera forma también empaqueta la DLL en un archivo CAB independiente, pero se hace referencia al archivo CAB en el archivo INF del control con un enlace. Usar un enlace permite que el proceso de descarga ejecute un archivo INF o EXE contenido 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
A continuación, se agrega una sección 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 primera manera de mencionar la inclusión de una dependencia de DLL en una descarga. Para incluir la DLL en un archivo CAB independiente, todo lo que se necesita es cambiar la ubicación de "thiscab" a la dirección URL en la que se ubicará el archivo CAB dependiente:
file-win32-x86=http://www.contoso.com/controls/dependent.cab
En este caso, Simpdll. cab solo contiene Simpdll. dll. se pueden agregar varias dll al archivo INF y a los archivos CAB anteriores si es necesario. La tercera forma de empaquetar archivos DLL dependientes es hacer referencia al archivo CAB del archivo DLL dependiente mediante un enlace. Con esta técnica, un archivo INF o EXE en el CAB dependiente puede ejecutarse en la descarga. La siguiente sección de un archivo. inf controla la descarga de la 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, los archivos dll de MFC se empaquetan en un archivo. exe autoextraíble, que se encuentra en el archivo. cab (Mfc42. cab). Sin embargo, las herramientas para hacer que los archivos. exe autoextraíbles no estén disponibles actualmente en Microsoft. Por lo tanto, tendrá que empaquetar los 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 bien, tendrá que crear un archivo EXE autoextraíble con herramientas de terceros. A continuación se muestra el archivo. inf que se usa para instalar los archivos dll de MFC dependientes. Puede modificar esto para instalar sus propios archivos dll de la misma forma en que se instalan 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 ======================
Un archivo DLL debe aparecer en la sección. Register Si exporta una función DllRegisterServer. Esto se puede determinar examinando la DLL con la utilidad DUMPBIN. exe del compilador de Visual C. También puede ejecutar regsvr32 en la DLL, que intenta registrar la DLL. Regsvr32 carga la DLL, comprueba que DllRegisterServer se ha exportado correctamente llamando a GetProcAddress () en la función DLLRegisterServer. Si se realiza correctamente, la función DllRegisterServer se exporta y, a continuación, se le llama. Sin embargo, ten en cuenta que ejecutar regsvr32 en la DLL puede tener efectos secundarios no deseados. Cuando se llama a DllRegisterServer, las entradas del registro apropiadas apuntan a la ubicación de la DLL en el equipo. Por ejemplo, puede causar problemas si escribe lo siguiente en un símbolo del sistema de MS-DOS:
   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 intente buscar Mfc42. dll, buscará el registro, detecta que el archivo está asignado a C:\Test\Mfc42.dll y que no lo encuentra allí. La ejecución de regsvr32 en un archivo que ya está instalado en un equipo no causa ningún problema. La instalación de un archivo DLL con un archivo EXE de extracción automática es útil por el siguiente motivo: Si una DLL que necesita actualizarse ya está cargada en la memoria, se producirá un error en la descarga. Este es un problema conocido, que se ha corregido en la versión 4,0 de Internet Explorer. Internet Explorer 4,0 le sugerirá reiniciar y cargar el nuevo archivo DLL durante el reinicio.

Referencias


Para obtener más información, consulte los artículos siguientes en Microsoft Knowledge Base:
167158 Cómo empaquetar controles MFC para usarlos en Internet
167597 Especificación de la FileVersion y #Version de la descarga de componentes
Para obtener más información, consulte la siguiente Webcast: