Comment faire pour télécharger les DLL dépendantes dans Internet Explorer avec un fichier .inf

Traductions disponibles Traductions disponibles
Numéro d'article: 165075 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Résumé

Il est souvent nécessaire de télécharger les DLL dépendantes avec un contrôle ActiveX. Contrôles MFC et Visual Basic ont cette exigence. Cet article explique les trois que vous pouvez effectuer cette opération manières.

Plus d'informations

Il existe trois façons d'inclure les DLL dépendantes dans le téléchargement d'un contrôle. La première consiste à inclure les DLL dans le fichier CAB pour le contrôle ainsi que les fichiers OCX et INF. L'inconvénient de cette est que la DLL sera téléchargée à tout moment que le contrôle est téléchargé. Dans certains cas, cela est approprié. La prochaine consiste à empaqueter les DLL dépendantes dans un fichier CAB séparé et faire référence à que dans le fichier INF pour le contrôle. La troisième méthode empaquette également la DLL dans un fichier CAB distinct, mais le fichier CAB est désigné dans le fichier du contrôle INF avec un raccordement. À l'aide d'un hook permet au processus de téléchargement exécuter un fichier INF ou EXE contenu dans le fichier CAB dépendant.

Pour ajouter une dépendance pour un OCX (Simpdll.dll dans cet exemple), une section semblable à la section pour le contrôle est ajoutée à la section [AddCode] du fichier INF:
   [Add.Code]
   TestDw.ocx=TestDw.ocx
   simpdll.dll=simpdll.dll
				
section est ensuite ajoutée au fichier INF pour contrôler l'installation de la DLL :
   [simpdll.dll]
   FileVersion=1,0,0,1
   file-win32-x86=thiscab
				
cette première méthode mentionnée pour inclure une dépendance DLL dans un téléchargement est.

Pour inclure la DLL dans un fichier CAB distinct, tout ce qui est nécessaire consiste à modifier l'emplacement à partir de «thiscab» à l'URL à laquelle se trouve le CAB dépendant :
file-Win32-x86=http://www.contoso.com/Controls/Dependent.cab
Dans ce cas, Simpdll.cab contient simpdll.dll uniquement.

Il est possible d'ajouter plusieurs DLL les fichiers INF et CAB ci-dessus si nécessaire.

La troisième méthode pour empaqueter les DLL dépendantes est de faire référence à fichier CAB de DLL dépendantes à l'aide d'un hook. Avec cette technique, un fichier INF ou EXE dans le fichier CAB dépendant peut être exécuté sur le téléchargement.

La section suivante à partir d'un fichier .inf contrôle le téléchargement de DLL dépendant de 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 fournies dans un fichier .exe auto-extractible, qui est contenu dans le fichier .cab (mfc42.cab). Toutefois, les outils pour mettre des fichiers .exe à extraction automatique ne sont pas actuellement disponibles auprès de Microsoft. Par conséquent, vous allez soit nécessaire de DLL dépendantes du package avec un fichier .inf ou une référence au fichier .inf dans le hook d'installation :
   [yourinstaller]
   file-win32-x86=http://example.microsoft.com/simpdll.cab
   InfFile=your.inf
				
or, vous devez créer un self extraction du fichier EXE à l'aide des outils tiers.

Pour illustrer, voici le fichier .inf utilisé pour installer les DLL MFC dépendantes. Vous pouvez modifier cette option pour installer vos propres DLL de la même manière que les DLL MFC sont installés.
   ; ========================= 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 doivent être répertoriées dans la section .register si il exporte une fonction DllRegisterServer. Cela peut être déterminé en examinant la DLL à l'aide de l'utilitaire de DUMPBIN.exe du compilateur Visual C. Vous pouvez également exécuter Regsvr32 sur la DLL, qui tente d'inscrire la DLL. Regsvr32 charge la DLL, vérifie que DllRegisterServer est correctement exporté par l'appel de GetProcAddress() sur la fonction DLLRegisterServer. Si elle réussit, lors la fonction DllRegisterServer est exportée et est ensuite appelée.

Méfiez-vous qu'exécutez Regsvr32 sur la DLL peut avoir des effets secondaires indésirables. Lorsque DllRegisterServer est appelée, elle rend les entrées de Registre pointant vers l'emplacement de la DLL sur l'ordinateur. Tapant ce qui suit dans une invite MS-DOS, à des fins de test, par exemple, peut provoquer 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 tentera Recherchez Mfc42.dll, il recherche le Registre, constate que le fichier est mappé à C:\Test\Mfc42.dll et n'est pas le trouver il. Exécutez Regsvr32 sur un fichier qui est déjà installé sur un ordinateur ne pose aucun problème.

Installation d'une DLL avec un hook et une extraction EXE d'automatique est utile pour la raison suivante : si une DLL qui doit être mis à 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é corrigé dans Internet Explorer version 4.0. Internet Explorer 4.0 vous suggère un redémarrage et charger la DLL de nouveau lors du redémarrage.

Références

Pour plus d'informations, consultez les articles suivants dans la base de connaissances Microsoft :
167158Comment faire pour les contrôles MFC de package pour une utilisation sur Internet
167597Spécifiant FileVersion et # version pour le téléchargement des composants

Pour plus d'informations, consultez la présentation technique en ligne suivantes :
How Does Internet Component Download Work?

Propriétés

Numéro d'article: 165075 - Dernière mise à jour: jeudi 21 décembre 2006 - Version: 2.5
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Internet Explorer 3.0
  • Microsoft Internet Explorer 3.01
  • Microsoft Internet Explorer 3.02
  • Microsoft Internet Explorer 4.0 Édition 128 bits
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.5
  • Windows Internet Explorer 8
  • Windows Internet Explorer 8 on Windows Server
Mots-clés : 
kbmt kbcode kbdownload kbfaq kbhowto KB165075 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 165075
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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