Ladda ned beroende DLL-filer i Internet Explorer med en. inf-fil


Sammanfattning


Det är ofta nödvändigt att ladda ner beroende DLL-filer tillsammans med en ActiveX-kontroll. För MFC-och Visual Basic-kontroller krävs detta. I den här artikeln förklarar vi tre olika sätt att göra detta.

Mer information


Det finns tre sätt att ta med beroende DLL-filer i nedladdning för en kontroll. Det första sättet är att inkludera DLL-filerna i CAB-filen för kontrollen tillsammans med OCX-och INF-filer. Nack delen med det här är att DLL-filen laddas ner när kontrollen laddas ner. I vissa fall är det lämpligt. Nästa steg är att paketera den beroende DLL-filen i en separat CAB-fil och hänvisa till den i INF-filen för kontrollen. Den tredje metoden paketerar också DLL-filen i en separat CAB-fil, men CAB-filen refereras till i kontrollens INF-fil med en Hook. Genom att använda en Hook kan du hämta en INF-eller EXE-fil i den underordnade CAB-filen. Om du vill lägga till ett beroende för ett OCX (Simpdll. dll i det här exemplet) läggs ett avsnitt som liknar avsnittet för kontrollen till avsnittet [AddCode] i INF-filen:
   [Add.Code]   TestDw.ocx=TestDw.ocx   simpdll.dll=simpdll.dll
Ett avsnitt läggs då till i INF-filen för att kontrol lera installationen av DLL:
   [simpdll.dll]   FileVersion=1,0,0,1   file-win32-x86=thiscab
Det här är det första som nämns för att inkludera ett DLL-samband i en nedladdning. Om du vill inkludera DLL-filen i en separat CAB-fil måste alla det vara nödvändigt att ändra platsen från "thiscab" till webb adressen där den underordnade CAB-mappen finns:
file-win32-x86=http://www.contoso.com/controls/dependent.cab
I det här fallet innehåller Simpdll. cab bara Simpdll. dll. flera DLL-filer kan läggas till i INF-och CAB-filerna om det behövs. Det tredje sättet att paketera beroende DLL: er är att referera till den beroende DLL-filens CAB-fil med hjälp av en Hook. Med den här metoden kan en INF-eller EXE-fil i den underordnade CAB-filen köras när du laddar ned den. I följande avsnitt från en. inf-fil kontrol leras nedladdning av den beroende DLL-filen för MFC-kontroller:
   [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
I det här fallet paketeras MFC-DLL-filerna i en självextraherande exe-fil, som finns i CAB-filen (mfc42. cab). Verktyg för att göra självextraherande. exe-filer är för närvarande inte tillgängliga från Microsoft. Därför måste du antingen paketera beroende bibliotek med en. inf-fil eller referera till. inf-filen i installations-hooken:
   [yourinstaller]   file-win32-x86=http://example.microsoft.com/simpdll.cab   InfFile=your.inf
Eller så måste du skapa en självextraherande EXE-fil med verktyg från tredje part. För att illustrera det här är följande. inf-filen som används för att installera de underordnade MFC DLL-filerna. Du kan ändra detta för att installera dina egna DLL-filer på samma sätt som MFC DLL-filerna.
   ; ========================= 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 ======================
En DLL måste finnas med i listan. registrera om den exporterar en DllRegisterServer-funktion. Det kan du göra genom att kontrol lera DLL-filen med Visual C compiler-verktyget Dumpbin. exe. Du kan också köra regsvr32 på DLL-filen som försöker registrera DLL-filen. Regsvr32 läser in DLL-filen verifierar att DllRegisterServer exporteras korrekt genom att anropa GetProcAddress () för funktionen DLLRegisterServer. Om det lyckas exporteras funktionen DllRegisterServer och anropas sedan. Tänk på att om du kör Regsvr32 på DLL-filen kan det finnas oönskade biverkningar. När DllRegisterServer anropas görs lämpliga register poster som pekar på platsen för DLL-filen på datorn. Om du till exempel skriver följande i en MS-DOS-kommandotolk kan det vara ett problem:
   copy mfc42.dll C:\Test   run "D:\msdev\bin\REGSVR32.EXE C:\Test\mfc42.dll"   delete mfc42.dll
Nästa gång systemet försöker leta efter Mfc42. dll ser det ut som om filen är mappad till C:\Test\Mfc42.dll och hittar den där. Om du kör Regsvr32 på en fil som redan är installerad på en dator orsakar det inga problem. Att installera en DLL med en Hook och en självextraherande EXE är användbart av följande skäl: om en DLL som måste uppgraderas redan har laddats upp fungerar nedladdningen inte. Detta är ett känt problem som har åtgärd ATS i Internet Explorer version 4,0. Internet Explorer 4,0 föreslår en omstart och laddar den nya DLL-filen under omstart.

Referenser


Mer information finns i följande artiklar i Microsoft Knowledge Base:
167158 Så här paketerar du MFC-kontroller för användning över Internet
167597 Ange FileVersion och #Version för nedladdning av komponenter
Mer information finns i följande webb sändning: