浅析ActiveX控件的CAB压缩

转载 2007年09月14日 10:50:00
1. 引言
ActiveX控件技术是从OLE基础上发展起来的,是将OLE进行了扩展从而使其适应Internet、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=http://activex.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和更早版本使用http://activex.microsoft.com/controls/vc/mfc40.cab外,其他版本都使用http://activex.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)。
关于证书和签名     -|zuiwanting 发表于 2006-5-24 9:58:00 
 
/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/Bin下有关于证书和签名相关工具
1。Makecert.exe ---证书创建工具
2。Cert2Spc.exe ---发行者证书测试工具
3。Signcode.exe ---文件签名工具
建立自己的根证书:
makecert -sk myPK -ss myName -n "CN=LUO31工作室" -r c:/luo31.cer
      sk-表示主题的密钥容器位置,ss-主题的证书存储名称, n-证书颁发对象,r-证书存储位置;
如果你需要导出私钥文件,请不要使用sk,而换作s,eg:makecert  -ss myName -n "CN=LUO31工作室" -sv c:/luo31.pvk  -r c:/luo31.cer
建立自根证书授权的子证书:
makecert -sk "myPK" -is myName -n "CN=luo31" -$ commercial -ic c:/luo31.cer  c:/31.cer
      sk-表示主题的密钥容器位置,is-颁发者的证书存储名称, n-证书颁发对象,ic-颁发者的证书存储位置,-$-授权范围(用于代码签名);
使用Cert2Spc生成spc发行者证书(可选):
cert2spc c:/31.cer c:/31.spc
使用signcode为你的程序,库或cab包签名:
双 击signcode,或在控制台键入signcode,不带参数会启动签名向导。在第三步选择“自定义选项”,第四步选择“从文件选择”选择31.spc 或31.cer,第五步选择“CSP中的私钥”,在密钥容器中选择我们定义的myPK,其他步骤默认即可,如果想添加时间戳,请在时间戳服务器地址上键 入:(免费时间戳认证)http://timestamp.verisign.com/scripts/timstamp.dll ;
完成后,观察你所签名的文件属性,应该已经添加数字签名项 


3.  ActiveX控件在页面上的引用

 

 <OBJECT id="axGraphOcxSCADA" style="Z-INDEX: 102; LEFT: 160px; WIDTH: 784px; POSITION: absolute; TOP: 80px; HEIGHT: 536px"
    codeBase="GraphOcx.CAB#version=1,0,0,3" classid="clsid:87186EA1-4D89-4F3E-9D25-1F03F0DDDB95"
    name="axGraphOcxSCADA" VIEWASTEXT>
    <PARAM NAME="_Version" VALUE="65536">
    <PARAM NAME="_ExtentX" VALUE="20743">
    <PARAM NAME="_ExtentY" VALUE="14182">
    <PARAM NAME="_StockProps" VALUE="0">
   </OBJECT>

 
 

相关文章推荐

Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(3)

这篇文章将介绍ActiveX版本更新的方法,参考了我最初文章中一位朋友的回复中的方法。通过设置注册表中的的ActiveX的版本(InstalledVersion)来维护更新。1、更新Activex的版...
  • hxp42
  • hxp42
  • 2011年05月27日 15:53
  • 850

C#开发ActiveX控件及制作CAB包(转)

一个项目要用到ActiveX控件,参照网上众多的例子,ActiveX控件倒是很容易就搞出来了; 然后做了一个【安装项目】,倒是可以使用,只不过需要在客户端手动点击安装,下一步,下一步…觉得不是很爽;...

C#开发ActiveX控件及制作CAB包

一个项目要用到ActiveX控件,参照网上众多的例子,ActiveX控件倒是很容易就搞出来了...
  • hyde114
  • hyde114
  • 2011年02月14日 14:37
  • 410

ActiveX控件打包cab时INF文件的编写

虽然微软对ActiveX越来越不信任,但是这个技术还是很多人喜欢用的,这个博客的编辑器貌似就用到了ActiveX。在我们编写好ocx控件后只有在打包成CAB文件加入数字签名后才能正常发布,如果你用的是...

ActiveX控件打包成Cab置于网页中自动下载安装(转载)

原文出自http://www.iteye.com/topic/110834  [背景]        做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,...

Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(4)

这一节将测试ActiveX控件在新版操作系统上运行的问题,并提出解决的办法。主要是ActiveX程序兼容性和CAB文件的安装问题。我在Vitual PC上安装了Windows 7,并且使用IE8浏览器...
  • hxp42
  • hxp42
  • 2011年05月27日 15:57
  • 1022

C#BS通过ActiveX控件及制作CAB包来调CS

1) 创建Visual Studio解决方案 "ActiveXSolution"。 2)在解决方案ActiveXSolution中添加 Windows窗体应用程序 “CSDemo”。 1. 在Wi...

Web发布cab文件打包的ActiveX控件总结

一、程序描述: 程序环境:windows Xp sp2, ie 6, tomcat 5.5, vc++6.0 程序过程:控件做成ocx文件,用于客户端调用本地硬件,其中有用到第三方几个.d...
  • sding
  • sding
  • 2011年09月08日 14:52
  • 748

ActiveX打包cab实现浏览器提示安装注册控件

实验前提:                 1. 有一个可注册的COM组件(如ActiveX) 2. 最好能有一台Windows server 2003作为证书服务器,用来申请签名代码的证书(本例...

ActiveX控件打包成Cab置于网页中自动下载安装

       做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必须进行本地的注册,也就是说用户得首先要把该ActiveX控件(test....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅析ActiveX控件的CAB压缩
举报原因:
原因补充:

(最多只允许输入30个字)