本节内容描述如何创建在 Internet 上分发 ATL 和 MFC 控件的 CAB 文件。如果需要有关 CAB 文件的更多信息,请参见 Platform SDK 文档中的压缩文件参考一文(在 MSDN Library/Setup 和 System Administration/Setup/Setup API/Overview/Cabinet Files 目录下)。
创建 CAB 文件:
- 创建 INF 文件。
- 运行 CABARC 实用工具。
创建 INF 文件
INF 文件是一个文本文件,用以指定为控件的运行而需要显示或下载的文件(如 DLL 文件或其他 OCX 文件)。INF 文件使您得以将所有所需的文件捆绑在一个压缩的 CAB 文件中。默认情况下,版本号同用户硬盘上的现有文件相同的文件不下载。有关 INF 文件及其选项的更多信息,包括如何创建与平台无关的 INF 文件,请参见 Platform SDK 文档中的关于 INF 文件和使用 INF 文件(在 MSDN Library/Setup 和 System Administration/Setup/Setup API/Overview/Setup Applications 目录下)。
举例来说,下面的 INF 文件用于为 ATL Polygon 控件创建 CAB 文件。可通过从 Visual C++ CD 下载 ATL POLYGON 示例文件和生成 MinSize 版本来生成 POLYGON.DLL。如果生成了 Polygon 控件的 MinSize 版,还需要另外一个 DLL,即 ATL.DLL。由于需要在 POLYGON.DLL 之前注册 ATL.DLL,因此请将 ATL.DLL 放置在 INF 文件中的第一位:
; Sample INF file for POLYGON.DLL [version] ; version signature (same for both NT and Win95) do not remove signature="$CHICAGO$" AdvancedINF=2.0 [Add.Code] polygon.dll=polygon.dll atl.dll=atl.dll ; needed DLL [atl.dll] file-win32-x86=thiscab FileVersion=2,00,0,7024 DestDir=11 RegisterServer=yes [polygon.dll] file-win32-x86=thiscab clsid={4CBBC676-507F-11D0-B98B-000000000000} FileVersion=1,0,0,1 RegisterServer=yes ; end of INF file
此 INF 文件指定需要在系统上安装给定版本的 ATL.DLL。如果 ATL.DLL 尚未存在于系统中,它将从用此 INF 创建的 CAB 文件中下载。“thiscab”是一个关键字,表示 CAB 包含此 INF。也可通过指定一条绝对或相对路径,从一个 HTTP 位置下载所需的 DLL,例如:
file-win32-x86=http://example.microsoft.com/mydir/NEEDED.DLL
关键字“file-win32-x86”将平台标识为 x86 特定的。
可通过在 Windows 资源管理器中的文件上单击鼠标右键来获取文件的版本号。从显示的列表中选择“属性”,然后在显示的对话框中选择“版本”选项卡。有时需要在文件版本中额外插入一个 0。例如,在对话框中 ATL.DLL 的版本号显示为 2.00.7024。而在 INF 文件中,这变为 2, 00, 0, 7024。
“DestDir”是将要加载文件的目录所在的位置:11 指定系统目录为 WINDOWS/SYSTEM 或 WINNT/SYSTEM32;10 指定 Windows 目录、WINDOWS 或 WINNT。如果未指定任何 DestDir(典型情况),则代码安装在固定的 OCCACHE 目录中。
“clsid”是将要安装的控件的 CLSID。
创建了 INF 文件后,运行 CABARC 实用工具(可在 Mssdk\Bin 目录中找到)以创建 CAB 文件。应在包含源文件的目录下运行 CABARC。在命令行上,按源文件出现在 INF 中的顺序排列它们,并将 INF 文件放在最后。例如,若要从上面的 INF 文件生成 Polygon 控件的 CAB 文件,请使用下面的命令:
C:\MSSDK\BIN\CABARC -s 6144 POLYGON.CAB ATL.DLL POLYGON.DLL POLYGON.INF
POLYGON.CAB 文件包含一个 ATL.DLL 和 POLYGON.DLL 的压缩版本,同时还含有在 POLYGON.INF 文件中将其解压缩所需的信息。
有关如何分析及从 CAB 文件中解压缩组件的示例,请参见 http://msdn.microsoft.com/visualc/downloads/samples.asp(选择 CabView 链接)上 MSDN Online Code Center 中的 CabView 示例。
需要在 MFC 控件中包含的 DLL 文件有 MSVCRT.DLL、MFC42.DLL 和 OLEPRO32.DLL。
运行 CABARC 实用工具
可在 Mssdk\Bin 目录中找到 CABARC 实用工具。例如:
C:\MSSDK\BIN\CABARC -s 6144 n MYCTL.CAB NEEDED1.DLL NEEDED2.DLL MYCTL.OCX MYCTL.INF
CABARC 创建一个称为 MYCTL.CAB 的 CAB 文件。
应在包含源文件(INF、OCX 和 DLL 文件)的目录下运行 CABARC。将在 CAB 文件中存档的文件应该按它们在 INF 文件中列出的同一顺序在命令行中列出。在上面的示例中,INF 文件应该将 NEEDED1.DLL 列在第一位,接下来是 NEEDED2.DLL,然后是 MYCTL.OCX。
-s 选项在压缩文件中保留用于代码签名的空间。n 命令指定希望创建 CAB 文件。