目的:
1.
依赖
MFC
库或
ATL
库等开发的
ActiveX
控件要正常的运行必须依赖这些库。但是你不能保证你用户的机器上装有与你开发环境相同的库,所以,当你发行一个
ActiveX
控件,你必须要包证这些依赖库的存在。
2.
在网络上运行的
ActiveX
控件,必须要保证你发行的控件小的足以让用户忍受下载的时间,当然是越小越好。控件本身你会发现微不足道,但你不得不还要考虑到他支持库的空间,你会发现的加上它的支持库,你的控件会变的臃肿不堪,所以你必须要找到一种方法为你的控件减减肥。
3.
得到控件后,使用前当然还要给它注册,但是你别忘了,还有他那些个依赖库的注册工作等着你耐心的一个个的
regsvr32
掉。
哦,天哪,用户只是想随便的浏览一个网页而已却要他做这么麻烦的工作,谁愿意做,我们上帝们才不会关心你这些技术细节,他们希望在电脑前轻点下鼠标就一切正常,他们要的是自动化!而这一切,
Cab
能帮你完全解决。
原理:
通过高压缩技术(比
ZIP
压缩度还高
3
成)——打包成
Cab
压缩文件。当用户第一次浏览你控件所在的网页时,它会自动提示控件下载,下载后会根据
cab
文件中的
*.inf
文本文件的来寻找你电脑的上相应的
DLL
(控件依赖库及控件本身,
ocx
本就是一种特殊的
DLL
)是否注册过,如果没有,会自动帮你注册,然后控件既可以正常使用。
(注:关于
cab
压缩技术,请参考
MSDN
或是网上相关搜索)
创建
cab
文件:
1.
创建
INF
文件。
INF
文件是一个文本文件,用以指定为控件的运行而需要显示或下载的文件(如
DLL
文件或其他
OCX
文件)。
INF
文件使您得以将所有所需的文件捆绑在一个压缩的
CAB
文件中。默认情况下,版本号同用户硬盘上的现有文件相同的文件不下载。有关
INF
文件及其选项的更多信息,包括如何创建与平台无关的
INF
文件,请参见
Platform SDK
文档中的关于
INF
文件和使用
INF
文件(在
MSDN Library/Setup
和
System Administration/Setup/Setup API/Overview/Setup Applications
目录下)。
举例来说,下面的
INF
文件用于为
AxYourControl
控件创建
CAB
文件。
AxYourControl
是由某一库支持开发的(
MFC
,
ATL
或其他),假设他所支持库的主要由
Need1.dll
,
Need2.dll
,
Need3.dll
三个
DLL
库(具体有哪些库文件根据情况查阅
MSDN
相关内容)。
; Sample INF file for AxYourControl.OCX
[version]
signature="$CHINA$"
AdvancedINF=2.0
[Add.Code]
AxYourControl.ocx= AxYourControl.ocx
Need1.dll= Need1.dll
Need2.dll= Need2.dll
Need3.dll= Need3.dll
; needed DLL
[Need1.dll]
file-win32-x86=thiscab
FileVersion=2,00,0,7024
DestDir=11
RegisterServer=yes
; needed DLL
[Need2.dll]
file-win32-x86=thiscab
FileVersion=2,00,0,7024
DestDir=11
RegisterServer=yes
; needed DLL
[Need3.dll]
file-win32-x86=thiscab
FileVersion=2,00,0,7024
DestDir=11
RegisterServer=yes
[AxYourControl.ocx]
file-win32-x86=thiscab
clsid={4CBBC676-507F-11D0-B98B-000000000000}
FileVersion=1,0,0,1
RegisterServer=yes
; end of INF file
此 INF 文件指定需要在系统上安装给定版本的 Need1.DLL, Need2.DLL和Need3.DLL。如果这些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。
2.
运行
CABARC
实用工具。
Cabarc.exe
是微软的一个
cab
文件制作工具。你可以到微软的官方网站下载
CABIN SDK
工具包。下载后解压安装,在其目录下有一个
Bin
目录下可以找到。
应在包含源文件的目录下运行
CABARC
。在命令行上,按源文件出现在
INF
中的顺序排列它们,并将
INF
文件放在最后。例如,若要从上面的
INF
文件生成
AxYourControl
控件的
CAB
文件,请使用下面的命令:
…\BIN\CABARC -s 6144 n
AxYourControl
.CAB
Need1
.DLL
Need2
.DLL
Need3
.DLL
AxYourControl
.OCX
AxYourControl
.INF
-s
选项在压缩文件中保留
用于代码签名
的空间。
n
命令指定希望创建
CAB
文件。有关
CABARC
命令和选项的列表,请在命令行上仅键入
CABARC
:
…\BIN\
CABARC
其他的一些补充:
1.
需要
MFC
控件中包含的
DLL
文件有
MSVCRT.DLL
、
MFC42.DLL
和
OLEPRO32.DLL
,其中
MFC42.DLL
视你开发环境的
MFC
版本所定,例如本人是在
vc7
环境下开发控件的,所以,应该为
MFC71.DLL
。
2.
为
ActiveX
空间创建
cab
文件还有一个重要的话题就是
将其打包为签名压缩
(CAB)
文件。签名文件使用户可以放心地下载代码安全的控件。关于这个话题,需要申请发行证书,详细情况可参见
MSDN
:
ms-help://MS.MSDNQTR.2003FEB.2052/vccore/html/Creating_Signed_CAB_Files_for_MFC_and_ATL_Controls.htm
3.
关于在创建
INF
时
DLL
的版本,你可以鼠标右击点出他的属性对话框,在版本一栏就可以看到了,注意,填写时,版本号之间的“
.
”号变换为“,”。
posted on 2007-01-08 17:34
我风 阅读(470)
评论(0) 编辑 收藏 引用