浅析ActiveX控件的CAB压缩

所属分类: 实用技巧 / 应用技巧 阅读数: 912
收藏 0 赞 0 分享
浅析ActiveX控件的CAB压缩
任凤华
摘 要 本文简单介绍了CAB压缩,以及使用WinCAB将ActiveX控件压缩为CAB文件的具体步骤。
关键词 ActiveX控件;CAB压缩;WinCAB;INF文件
1. 引言
ActiveX控件技术是从OLE基础上发展起来的,是将OLE进行了扩展从而使其适应Intern 
et、Intranet、商业应用程序等的开发。当ActiveX控件的程序代码在Internet上传输时,使用压缩技术传输程序代码变得非常有意义。
从另一方面来看,如果ActiveX控件还调用到其他的DLL程序模块,那么IE也必须把这些程序下载到本地来。为此,Microsoft采用了惯用的CAB压缩方法,它把ActiveX控件应用程序以及相关的其他文件放在同一个CAB文件中,然后在CODEBASE属性中指定CAB文件的URL路径。当IE找到CODEBASE属性时,它会自动解析URL地址从而把CAB文件解压到客户机的临时目录,然后注册有关文件,调用COM API函数创建ActiveX控件对象。这样就完成了ActiveX控件的传输。
2. CAB压缩技术简介
微软公司在发行Windows 95、Plus!95等软件时  
采用了一种全新的CAB压缩包形式,它具有压缩率高、安全性好、不易受到破坏等优点,深受广大用户及软件制作商的欢迎。许多用户甚至因此希望将自己的数据文件改用CAB压缩包的形式加以压缩、备份,以尽可能的减少备份文件所占用的磁盘空间,并提高它们的安全性。目前制作CAB文件的软件有主要有Cabarc和WinCAB。
 Cabarc是一个用于压缩、列出压缩包中的文件、解压CAB文件的工具。Cabarc支持通配符和递归路径搜索。不过Cabarc使用一个类似于常用的压缩工具的命令行界面,
并且有较多的参数,与现在主流的Windows操作系统不太协调,使用起来不是很方便。
而WinCAB是一种可视化的全新的CAB压缩包制作软件,它具有采用图形界面、支持分卷压缩、可制作具有自解包功能的CAB压缩包(*.EXE文件格式)等优秀功能,这就从根本上解决了CAB压缩包的制作问题。需要注意的是在运行WinCAB.exe时,必须确保makecab.exe文件也在相同的目录下。
本文就以WinCAB为例来介绍ActiveX控件的CAB文件的制作过程。
3. 将ActiveX控件压缩成CAB文件
主要步骤有:
1)注册YourCtl.ocx控件。
2)建立YourCtl.inf文件。
 INF文件的格式如下:(在使用Visual C++6.0的情况下)
 [version]
 signature="$CHICAGO$"
 AdvancedINF=2.0
[Add.Code]
 YourCtl.ocx=YourCtl.ocx
 mfc42.dll=mfc42.dll
 msvcrt.dll=msvcrt.dll
 olepro32.dll=olepro32.dll
[YourCtl.ocx]
 file-win32-x86=thiscab
 clsid={YourCtl.ocx的CLSID} //在YourCtl.odl文件中可以找到
 FileVersion=1,0,0,1
 RegisterServer=yes
[msvcrt.dll]
 FileVersion=6,0,8168,0 
 hook=mfc42installer
[mfc42.dll]
 FileVersion=6,0,8168,0
 hook=mfc42installer
[olepro32.dll]
 FileVersion=5,0,4261,0
 hook=mfc42installer
[mfc42installer]
 file-win32-x86=VALUE=aaaaaaaaaaactivex.microsoft.com/controls/vc/mfc42.cab
 run= % EXTRACT_DIR % \mfc42.exe
 这里需要说明的是上述msvcrt.dll、mfc42.dll、olepro32.dll的FileVersion是根据VC不同的版本而异的,例如在VC5.0sp3中就应该如下
 olepro32.dll 5,0,4230,1
 mfc42.dll 4,21,0,7303
 msvcrt.dll 5,0,0,7303
 每个VC版本都有不同的版本号,这里只介绍常见的两种。 另外mfc42installer的下载路径除了VC4.1和更早版本使用aaaaaaaaaaactivex.microsoft.com/controls/vc/mfc40.cab外,其他版本都使用aaaaaaaaaaactivex.microsoft.com/controls/vc/mfc42.cab。
3)启动WinCAB开始压缩。(其中注意Makecab.exe要在WinCAB目录下)
 i)启动WinCAB,然后执行“Cabinet”菜单的“New”命令或单击快捷工具栏上的“New cabinet”按钮,准备制作新的CAB压缩包。
 ii)单击快捷工具栏上的“Add file(s) to cabinet”按钮,打开“Add file(s) to cabinet”对话框。
iii)选择欲添加到CAB压缩包中的文件后单击“打开”按钮,将它们添加到WinCAB的文件列表中。这里只需要添加YourCtl.ocx和YourCtl.inf两个文件。
iv)在WinCAB快捷工具栏的“Cabinet path and name”框中输入或利用“Browse for path and name”按钮指定CAB压缩包的路径及文件名。
v)在“Cabinet size”栏中指定CAB压缩包的尺寸。
vi)在“Compression method”框中选择合适的压缩方式。
vii)单击“Save cabinet”按钮,WinCAB即会按照用户的要求进行压缩。
viii)压缩完成后,WinCAB会给出一个“WinCAB Report”的报告框,向广大用户报告有关文件个数、压缩前后的文件尺寸、压缩率、压缩时间等情况。至此,一个CAB文件就生成了。
4. 结束语
 由于CAB的压缩率比我们常用的ARJ、ZIP、RAR等压缩包要高许多(约20%),从而进一步的减少了压缩文件所占用的磁盘空间,当采用该技术在Internet上传输ActiveX控件时既减少了网络流量,也加快了网页打开的速度。
另外,由于CAB压缩包具有“只读”属性,在创建完成后即不允许再作任何修改、删除,因此不易受到病毒、误操作等问题的影响,安全性也具有保证,实为广大用户在Windows 下进行文件的压缩、备份工作时的最佳选择。
注:**基金项目**,国家973计划,(编号:G1998030600)。
参考文献
[1]. 潘爱民. COM原理与应用[M].北京:清华大学出版社,1999.
[2]. Packaging ActiveX Controls. aaaaaaaaaasupport.microsoft.com ,2003.
更多精彩内容其他人还在看

删除XP中“自定义通知”的历史项目

XP中自定义通知很反感,告诉大家它的删除方法
收藏 0 赞 0 分享

更改IE浏览器的图标

注册表更改IE图标
收藏 0 赞 0 分享

Win2000/XP下的SFC使用参数

Win98下有一个非常好用的工具 --> 系统文件检查器,使用它可以很快速的检查出你的系统有没有系统文件丢失或者被修改,并且自动提醒你还愿系统文件以保证系统的稳定性,减少重新安装系统的麻烦,现在这个程序已经移植到Win2000里面了,不过使用的方法和Win98不同了,必须加
收藏 0 赞 0 分享

拨号一切正常 但不能上网的解决方法

前几天遇到一个问题: 拨号一切正常,确不能上网。通过网上查找,问题解决.
收藏 0 赞 0 分享

Win XP系统语言栏丢失解决三例

案例一:   问:一台计算机使用Windows XP操作系统,最近任务栏内无法显示语言栏,我通过“区域和语言选项”里的设置找回了语言栏,重新启动计算机后,问题依旧,请问是什么问题造成的?
收藏 0 赞 0 分享

设计软件中的系统字体应用小技巧

大家都知道,在操作系统的安装目录下有字体库,要使用种字体首先需要安装,但是这会造成字体占用系统盘空间过多。设计使用的字体都不少,怎么说也有几个G,很占资源,下面教大家一个稍微节省资源的方法。
收藏 0 赞 0 分享

Access中字段上自动打开的输入法的解决方法

打开Access数据库时,在里面数据表字段输入数值时,总是会跳出输入法来,很是烦人,在网上找了一下,找到了相应的解决办法:
收藏 0 赞 0 分享

“internet explore 无法打开internet站点 已终止操作”的解决方法

在IE下,当页面还没有加载完全时,如果正在执行的JS代码中含有使用了document.createElement的话,很容易引起页面加载失败.导致提示"internet explore 无法打开internet站点 http://www.xxx.com/xxx/xxx.
收藏 0 赞 0 分享

十个习惯让你精通新的开发技术

这篇文章,是从我的《高效开发人员的五个特征》一文中抽出的一个观点。从我自身的事业和习惯中,我考虑了很多方式怎么样才能有效地学习。
收藏 0 赞 0 分享

小谈RADMIN爆破

最近做渗透测试时常碰到RADMIN一类的东西.. 一碰到此类的程序,一般我都会先看下对方把RADMIN的端口配置成什么..以及相应的PASS(加密过的)
收藏 0 赞 0 分享
查看更多