Télécharger des dll dépendantes dans Internet Explorer avec un fichier. inf


Résumé


Il est souvent nécessaire de télécharger une dll dépendante avec un contrôle ActiveX. Ce paramètre est requis pour les contrôles MFC et Visual Basic. Cet article vous explique trois méthodes que vous pouvez utiliser.

Informations supplémentaires


Il existe trois façons d’inclure des dll dépendantes dans le téléchargement d’un contrôle. Pour commencer, vous devez inclure les DLL dans le fichier CAB du contrôle avec les fichiers OCX et INF. L’inconvénient est que la DLL est téléchargée dès que le contrôle est téléchargé. Dans certains cas, cela est approprié. La méthode suivante consiste à empaqueter les DLL dépendantes dans un fichier CAB distinct et à vous référer dans le fichier INF pour le contrôle. La troisième méthode consiste également à empaqueter la DLL dans un fichier CAB distinct, mais le fichier CAB est référencé dans le fichier INF du contrôle avec un raccordement. L’utilisation d’un raccordement permet au processus de téléchargement d’exécuter un fichier INF ou EXE contenu dans le fichier CAB dépendant. Pour ajouter une dépendance pour une classe OCX (Simpdll. dll dans cet exemple), une section semblable à la section du contrôle est ajoutée à la section [AddCode] du fichier INF :
   [Add.Code]   TestDw.ocx=TestDw.ocx   simpdll.dll=simpdll.dll
Une section est alors ajoutée au fichier INF pour contrôler l’installation de la DLL :
   [simpdll.dll]   FileVersion=1,0,0,1   file-win32-x86=thiscab
Il s’agit de la première méthode d’inclusion d’une dépendance de DLL dans un téléchargement. Pour inclure la DLL dans un fichier CAB distinct, il est nécessaire de remplacer l’emplacement « thiscab » par l’URL d’emplacement du fichier CAB dépendant :
file-win32-x86=http://www.contoso.com/controls/dependent.cab
Dans ce cas, Simpdll. cab contient uniquement Simpdll. dll. plusieurs dll peuvent être ajoutées aux fichiers INF et CAB ci-dessus, si nécessaire. Le troisième mode de création d’un package de dll dépendantes consiste à faire référence au fichier CAB de la DLL dépendante au moyen d’un raccordement. Avec cette technique, un fichier INF ou EXE dans le CAB dépendant peut être exécuté lors du téléchargement. La section suivante d’un fichier. inf contrôle le téléchargement d’une DLL dépendante pour les contrôles 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
Dans ce cas, les DLL MFC sont empaquetées dans un fichier. exe à extraction automatique, qui est inclus dans le fichier. cab (Mfc42. cab). Toutefois, les outils de création de fichiers. exe à extraction automatique ne sont pas disponibles actuellement auprès de Microsoft. Par conséquent, vous devrez soit empaqueter des dll dépendantes à l’aide d’un fichier. inf, soit faire référence au fichier. inf dans le raccordement d’installation :
   [yourinstaller]   file-win32-x86=http://example.microsoft.com/simpdll.cab   InfFile=your.inf
Vous devrez peut-être créer un fichier EXE à extraction automatique à l’aide d’outils tiers. Pour illustrer ce qui suit, le fichier. inf utilisé pour installer les DLL MFC dépendantes est le suivant. Vous pouvez modifier cet aspect pour installer vos propres DLL de la même façon que les DLL MFC sont installées.
   ; ========================= 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 ======================
Une DLL doit être répertoriée dans la section. Register s’il exporte une fonction DllRegisterServer. Pour cela, vous pouvez examiner la DLL avec l’utilitaire DUMPBIN. exe du compilateur Visual C. Vous pouvez également exécuter Regsvr32 sur le DLL, qui tente d’inscrire la DLL. Regsvr32 charge la DLL, vérifie que DllRegisterServer est correctement exporté en appelant GetProcAddress () sur la fonction DLLRegisterServer. S’il réussit, la fonction DllRegisterServer est exportée et est appelée. En revanche, l’exécution de regsvr32 sur le DLL risque d’avoir des effets inattendus. Lorsque DllRegisterServer est appelé, il effectue des entrées de Registre appropriées vers l’emplacement de la DLL sur l’ordinateur. Par exemple, si vous tapez la commande suivante à des fins de test, vous pouvez rencontrer des problèmes :
   copy mfc42.dll C:\Test   run "D:\msdev\bin\REGSVR32.EXE C:\Test\mfc42.dll"   delete mfc42.dll
La prochaine fois que le système tente de rechercher le fichier Mfc42. dll, il recherche le registre, recherche que le fichier est mappé à C:\Test\Mfc42.dll et qu’il n’y trouve pas. L’exécution de regsvr32 sur un fichier déjà installé sur un ordinateur ne pose pas de problème. L’installation d’une DLL avec un hook et un EXE auto-extractible est utile pour la raison suivante : si une DLL qui doit être mise à niveau est déjà chargée en mémoire, le téléchargement échoue. Il s’agit d’un problème connu qui a été résolu dans la version 4,0 d’Internet Explorer. Internet Explorer 4,0 suggère un redémarrage et charge la nouvelle DLL lors du redémarrage.

Références


Pour plus d’informations, consultez les articles suivants dans la base de connaissances Microsoft :
167158 Comment empaqueter des contrôles MFC pour une utilisation via Internet
167597 Spécification de FileVersion et de #Version pour le téléchargement de composant
Pour plus d’informations, reportez-vous à la présentation technique suivante :