如何使用 .inf 檔案在 Internet Explorer 中下載相依的 Dll

摘要

您通常需要下載相依的 Dll 以及 ActiveX 控制項。 MFC 與 Visual Basic 控制項都有這個需求。 本文將說明可執行此動作的三種方法。

其他相關資訊

有三種方法可在控制項的下載中加入相依的 Dll。 第一種方法是將 DLL 與 OCX 和 INF 檔案一起包含在該控制項的 CAB 檔中。 此情況的缺點是,任何時候下載該控制項時,都會下載 DLL。 在某些情況下,這是適當的。 另一種方法是將相依的 DLL 封裝在個別的 CAB 檔案中,並在控制項的 INF 檔案中參考該檔案。 第三種方法也會將 DLL 封裝在個別的 CAB 檔案中,但 CAB 檔案是在控制項的 INF 檔案中以掛鉤來引用。 使用掛接程式可讓下載程式執行相依的 CAB 檔案中所含的 INF 或 EXE 檔案。若要在此範例中為 OCX (Simpdll)加入相依性,請在 INF 檔案的 [AddCode] 區段中新增與控制項區段類似的章節:

   [Add.Code]   TestDw.ocx=TestDw.ocx   simpdll.dll=simpdll.dll

接著會在 INF 檔案中新增一個區段,以控制 DLL 的安裝:

   [simpdll.dll]   FileVersion=1,0,0,1   file-win32-x86=thiscab

這是在下載中加入 DLL 相依性的第一種方式。若要在個別的 CAB 檔案中包含 DLL,您必須將位置從 "thiscab" 變更為要存放相依 CAB 的 URL:

file-win32-x86=http://www.contoso.com/controls/dependent.cab在此情況下,Simpdll 只包含 Simpdll。如有需要,可在上述的 INF 和 CAB 檔案中新增多個 Dll。封裝相依的 Dll 的第三種方式是使用掛鉤來參照相依 DLL 的 CAB 檔案。 有了這項技術,就可以在下載時執行相依的 CAB 中的 INF 或 EXE 檔案。.Inf 檔案的下列章節會控制 MFC 控制項的相依 DLL 下載:

   [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

在這種情況下,MFC Dll 封裝在一個自解壓縮 .exe 檔案中,該檔案包含在 .cab 檔案(mfc42)中。 不過 Microsoft 目前不提供從 Microsoft 取得自解壓縮 .exe 檔案的工具。 因此,您必須使用 .inf 檔案封裝相依的 Dll,或在安裝掛鉤中參照 .inf 檔案:

   [yourinstaller]   file-win32-x86=http://example.microsoft.com/simpdll.cab   InfFile=your.inf

或者,您將需要使用協力廠商工具建立自我解壓縮 EXE 檔案。為了說明,以下是用來安裝相依 MFC Dll 的 .inf 檔案。 您可以修改此專案來安裝您自己的 Dll,就像安裝 MFC Dll 一樣。

   ; ========================= 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 ======================

若要匯出 DllRegisterServer 函數,必須在. register 節中列出 DLL。 您可以透過 Visual C 編譯器的 Dumpbin 實用程式檢查 DLL 來判斷這一點。 您也可以在 DLL 上執行 Regsvr32,這會嘗試註冊 DLL。 Regsvr32 載入 DLL,透過在 DLLRegisterServer 函數上呼叫 GetProcAddress ()來驗證 DllRegisterServer 是否已正確匯出。 如果成功,則會匯出函數 DllRegisterServer,然後再呼叫它。不過,請注意,在 DLL 上執行 Regsvr32 可能會產生不需要的副作用。 呼叫 DllRegisterServer 時,它會使適當的登錄專案指向電腦上的 DLL 位置。 例如,在 MS-DOS 提示中輸入以下內容,以進行測試,可能會造成問題:

   copy mfc42.dll C:\Test   run "D:\msdev\bin\REGSVR32.EXE C:\Test\mfc42.dll"   delete mfc42.dll

下次系統會嘗試尋找 Mfc42 時,它會查詢註冊表,找出檔案已對應至 C:\Test\Mfc42.dll,而且在該處找不到。 在已安裝在電腦上的檔案上執行 Regsvr32,不會造成問題。安裝含有掛鉤和自解壓縮 EXE 的 DLL,可能會因為下列原因而有所説明:如果已在記憶體中載入需要升級的 DLL,下載將會失敗。 這是已知的問題,已在 Internet Explorer 版本4.0 中修正。 Internet Explorer 4.0 將建議您在重新開機期間重新開機並載入新的 DLL。

參考

如需其他資訊,請參閱 Microsoft 知識庫中的下列文章:

如何封裝可透過網際網路使用的 MFC 控制項

指定元件下載的 FileVersion 和 #Version如需詳細資訊,請參閱下列網路廣播:

需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×