如何下载与一个.inf 文件的 Internet Explorer 中的依赖 dll

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 165075
概要
它通常是需要下载连同一个 ActiveX 控件的依赖 dll。MFC 和 Visual Basic 的控件都有此要求。本文将介绍三种方法可以执行此操作。
更多信息
有三种方法可以为控件下载中包括依赖 dll。第一种方法是在 CAB 文件中为该控件与 OCX 和 INF 文件一起包含在 DLL(s)。这样的缺点在于 DLL 将下载该控件将被下载任何时间。在某些种情况下这是合适的。下一种方法是打包在一个单独的 CAB 文件相关的 DLL(s) 并在该控件的 INF 文件中引用的。第三种方式也打包在一个单独的 CAB 文件中 DLL,但在与挂钩的控件的 INF 文件中被引用该 CAB 文件。通过使用挂钩,下载过程执行相关的 CAB 文件中包含一个 INF 或 EXE 文件。

对于一个 OCX (在本例中 Simpdll.dll) 中添加一个依赖项类似于控件的节的节被添加到的 INF 文件 [AddCode] 部分:
   [Add.Code]   TestDw.ocx=TestDw.ocx   simpdll.dll=simpdll.dll				
一节,然后添加到控制的 DLL 安装 INF 文件:
   [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.cab 包含仅 simpdll.dll。

如有必要,可以将多个 dll 添加到上面 INF 和 CAB 文件。

若要打包的依赖 dll 在第三种方式是使用一个挂接依赖 DLL 的 CAB 文件,请参阅。与此的技术依赖 CAB 中的一个 INF 或 EXE 文件可以执行的下载。

下的一节从.inf 文件控制依赖 DLL 下载的 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				
在这种情况下将 MFC dll 打包在.cab 文件 (mfc42.cab) 中包含一个自解压缩.exe 文件。但是,工具,以使自解压.exe 文件不是从 Microsoft 当前可用的。 因此,您将任一需要用.inf 文件打包依赖 dll 或引用.inf 文件安装挂接中的:
   [yourinstaller]   file-win32-x86=http://example.microsoft.com/simpdll.cab   InfFile=your.inf				
或需要将生成一个自解压使用第三方工具的 EXE 文件。

为了说明,下面就是用来安装依赖的 MFC dll 在.inf 文件。您可以修改此 MFC dll 安装了相同的方式安装您自己的 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 ======================				
A DLL 需要.register 一节中列出,如果它导出 DllRegisterServer 函数。这可以通过检查 DLL 使用 Visual C 编译器的 Dumpbin.exe 实用程序来确定。您也可以运行 Regsvr32 上在试图注册 DLL 的 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.dll,它查找注册表,找到该文件被映射到 C:\Test\Mfc42.dll,并且找不到它存在。已安装在计算机上的文件上运行 Regsvr32 不会导致问题。

由于以下原因使用挂钩和 EXE 中提取一自行安装 DLL 很有用: 如果一个 DLL,它需要升级它已经加载到内存中,下载将失败。这是一个已知的问题已得到修复在 Internet Explorer 4.0 版中。Internet 浏览器 4.0 将建议重新启动,并在重新启动期间加载新 DLL。
参考
有关更多的信息,请参阅下面 Microsoft 知识库中相应的文章:
167158如何用于通过 Internet 的包 MFC 控件
167597为组件下载指定 FileVersion 和 #Version

有关详细的信息,请参阅以下网络广播:

警告:本文已自动翻译

Властивості

Ідентифікатор статті: 165075 – останній перегляд: 12/21/2006 10:11:59 – виправлення: 2.5

Microsoft Internet Explorer 3.0, Microsoft Internet Explorer 3.01, Microsoft Internet Explorer 3.02, Microsoft Internet Explorer 4.0 128-Bit Edition, Microsoft Internet Explorer 5.0, Microsoft Internet Explorer 5.5, Windows Internet Explorer 8, Windows Internet Explorer 8 on Windows Server

  • kbmt kbcode kbdownload kbfaq kbhowto KB165075 KbMtzh
Зворотний зв’язок