posts - 126,  comments - 73,  trackbacks - 0

目的:

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.DLLNeed3.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/SYSTEM3210 指定 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:12 我风 阅读(851) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(12)

随笔分类

随笔档案

文章档案

相册

收藏夹

C++

MyFavorite

搜索

  •  

积分与排名

  • 积分 - 324012
  • 排名 - 75

最新评论

阅读排行榜

评论排行榜