创建 CAB 文件

本节内容描述如何创建在 Internet 上分发 ATL 和 MFC 控件的 CAB 文件。如果需要有关 CAB 文件的更多信息,请参见 Platform SDK 文档中的压缩文件参考一文(在 MSDN Library/Setup 和 System Administration/Setup/Setup API/Overview/Cabinet Files 目录下)。

创建 CAB 文件:

  1. 创建 INF 文件。
  2. 运行 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 文件中解压缩组件的示例,请参见 https://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 文件。有关 CABARC 命令和选项的列表,请在命令行上仅键入 CABARC:

C:\MSSDK\BIN\CABARC

请参见

为 MFC 和 ATL 控件创建签名 CAB 文件