手把手教你用CAB发布OCX的简单办法

来源:互联网 发布:java aop 日志记录 编辑:程序博客网 时间:2024/05/20 18:01

CAB是一种文件压缩格式,把OCX文件(ActiveX插件)压缩成CAB文件是为了发布它,
这种发布方式给人感觉“浏览器会自动安装该插件”,很多朋友钟情于此。
目前流行很多压缩工具,但WINRAR这类工具生成的CAB文件浏览器无法识别。
经过试用,发现用Windows系统文件CABARC来制作CAB是最简单有效的办法,
下面以打印控件Lodop为例,一步步了解制作CAB文件和部署发布的过程:

 

第一步、判断操作系统是否有CABARC文件
    判断途径如下:
操作系统 开始->运行...->键入命令cmd->键入命令CABARC
若显示一大段版本声明和命令选项的英文说明,表示系统存在CABARC,如果不存在可以从网上搜一个

或者从这里下载,下载解压后放到操作系统目录下。

 

第二步、准备ocx文件
    把打印控件Lodop的实体ocx文件复制到C:\test目录下,并起名为Lodop.ocx
注:安装过Lodop的机器中,ocx文件存放在C:\WINDOWS\system32\CAOSOFT_WEB_PRINT_lodop.ocx

Program Files\MountTaiSoftware\Lodop下。

 

第三步、制作CAB文件
   在第一步的cmd窗口中,键入如下命令:
CABARC -s 6144 N c:\test\lodop.cab c:\test\lodop.ocx
该命令执行完毕后,在C:\test目录下会看到新生成的Lodop.cab文件。
在这行命令中,CABARC之后有五个参数值,参数之间用空格分隔,
其中 -s 6144 俩参数表示生成的CAB文件以后可以进行代码签名,
如果以后不想签名,该参数可以不加,代码签名是个很纠结的问题,以后细说。

 

以上这步还有个简单办法,就是把该命令行字串用记事本复制到一个bat文件中,
譬如起名CreateLodopCAB.bat,需要生成CAB文件时双击该bat文件就可。
该办法适合经常发布同一产品的不同版本。

 

第四步、CAB文件的使用方式一
    插件用CAB发布的最简单办法是页面object对象的codebase直接指向该CAB文件,
把下面这段完整的超文本复制到一个html文件中,起名为demo.html

<html>
<H1> Lodop CAB File Test Page </H1><p>
<object
   classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA"
   codebase="lodop.cab#version=5,0,5,7"
   width=200
   height=100
>
</object>
</html>

把文件demo.html和第三步生成的lodop.cab放到同一个web目录下就ok了。
以上这段代码应该很好理解,其中lodop.cab之前还可以包含web路径,
也就是说插件可以单独部署,通过路径指向具体的部署位置。
现在你把浏览器的URL通过web打开demo.html文件,测试看看是否“自动安装”。

 

第五步、CAB文件的使用方式二
    页面还可以通过一个inf文件来发布插件,以便部署多个ocx,此时超文本变成如下:

<html>
<H1> Lodop Test Page </H1><p>
<object
   classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA"
   codebase="lodop.inf"
   width=0
   height=0
>
</object>
</html>

其中lodop.inf是txt格式,内容如下:

[Add.Code]
lodop.ocx=lodop.ocx

 

[lodop.ocx]
file=lodop.cab
clsid={2105C259-1E0C-4534-8141-A753534CB4CA}
RegisterServer=yes
FileVersion=5,0,5,7

这些代码还算好理解,不用累述。


    以上简单几步就实现了网页插件的“自动安装”部署,但遗憾的是,
在实践中这种安装非常“不自动”,因浏览器阻断而安装失败的几率很大。
针对这种情况,无论是著名的Flash还是Lodop,都提供了exe格式的安装程序,

让用户下载后执行安装。当然二者结合起来部署,则是不错的选择!

 

 

 
查看文章
  
Web发布cab文件打包的ActiveX控件总结
2009-12-20 5:07

一、程序描述:
程序环境:windows Xp sp2, ie 6, tomcat 5.5, vc++6.0

程序过程:控件做成ocx文件,用于客户端调用本地硬件,其中有用到第三方几个.dll文件。采用windows自带iexpress.exe 打包成cab文件,在服务器端jsp页面进行控件调用,下载cab文件并自动注册。

二、程序问题:
遇到问题:
1.       cab文件无法下载,而且根本不加提示。
2.       下载好的cab文件在system32中能够看到,但是页面仍然不能显示,一把红叉,并且无法使用。

问题测试:
1.       浏览器页面根本没有下载提示,考虑应该是cab的路径问题,也曾考虑是ie浏览器的安全问题。将安全降到最低测试。反复更改cab路径。
2.       这个问题最郁闷,搞了很久。考虑首先是安全问题,然后在网上搜索之后说是sp2调高了安全策略,有说降低安全,有说需要对程序进行数字签名。

问题解决:
1.       确实是路径不对,与安全无关。当在jsp中代码为:
<OBJECT id=pos codebase="TestCAB.CAB#version=1,0,0,1" height=100 width=100 classid="CLSID:719A1D6E-7099-4123-9D63-F0118AFF2D61" VIEWASTEXT></OBJECT>
TestCAB.CAB文件应该放置在tomcat5.5安装目录Tomcat 5.5\webapps下该调用jsp所在的工程下。
2.       不需要更改安全级别,而应该在Internet选项-〉安全-〉受信任的站点-〉站点 中添加服务器地址。注意:不要选复选框“对该区域中的所有站点要求服务器验证”。

三、总结:
1. 将ocx文件以及第三方dll文件打包成cab文件:
Internet 软件分发单位是“软件包”,它由包含.INF文件或软件分发.OSD文件(或两者都包括)的.CAB文件所组成。一个分发单位也可以包含软件组件,如 ActiveX 控件(.OCX)、.DLL文件、.EXE文件、Java类文件或小程序。当Web页上OBJECT元素的CODEBASE特性引用包含.INF文件的. CAB文件时,Internet Explorer将自动把.CAB文件作为软件分发单位下载并安装,每次访问时还会自动检测版本并进行更新。
INF文件是一个文本文件,指定运行控件所需要下载或者呈交的文件(比如.DLL或者其它.OCX)。一个.INF文件就捆绑了.CAB压缩文件所有的必须文件。 缺省情况下,与现有硬盘中文件版本号相同的文件不被下载。
先自己写了一个inf文件,其中信息包括将.ocx文件,以及相关的.dll文件打包,并下载到文件夹:\WINDOWS\system32,详细标注如下:
[version]   
signature="$CHICAGO$"
AdvancedINF=2.0

[DefaultInstall]   
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[RInstallApplicationFiles]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[DestinationDirs]
install.files=11
[SourceDisksNames]   
1=%DiskName%,TestCAB.CAB,1

[Add.Code]
pcpos.ocx=pcpos.ocx
Comm.dll=comm.dll
pcpos.dll=pcpos.dll
TCPCLNT.dll=TCPCLNT.dll

[install.files]
pcpos.ocx=pcpos.ocx
Comm.dll=comm.dll
pcpos.dll=pcpos.dll
TCPCLNT.dll=TCPCLNT.dll

[SourceDisksFiles]
pcpos.ocx=1
Comm.dll=1
pcpos.dll=1
TCPCLNT.dll=1

[pcpos.ocx]
file-win32-x86=thiscab   
RegisterServer=yes   
clsid={719A1D6E-7099-4123-9D63-F0118AFF2D61}   
DestDir=11   
FileVersion=1,0,0,1

[Comm.dll]
file-win32-x86=thiscab   
RegisterServer=yes                        
DestDir=11   
FileVersion=1,0,0,1

[pcpos.dll]
file-win32-x86=thiscab   
RegisterServer=yes     
DestDir=11   
FileVersion=1,0,0,1

[TCPCLNT.dll]
file-win32-x86=thiscab   
RegisterServer=yes     
DestDir=11   
FileVersion=1,0,0,1

[RegisterFiles]   
%11%\pcpos.ocx

注释:
"thiscab" 是一个关键字,意指包含该INF的CAB文件。也可以从网上下载所需要的DLL文件,只要指定一个HTTP 网址即可,如:
file-win32-x86=http://www.mysite.com/mydir/NEEDED.DLL
关键字"file-win32-x86" 指定平台是 x86。
文件版本号可见属性。
"DestDir"指的是装载目录或者文件的地址: 11 指定为系统目录 WINDOWS/ /SYSTEM32;
"clsid" 指的是要安装控件的CLSID。

制作cab:
使用\WINDOWS\system32\iexpress.exe。
1)        选择“Create new Self Extraction Directive file”,点击下一步。
2)        选择“Create compressed files only(ActiveX Installs)”,点击下一步。
3)        点击Add,文件添加(pcpos.ocx,pcpos.dll,comm.dll,tcpclnt.dll),点击下一步。
4)        点击Browse,输入.CAB文件的存放地址(包含所取文件名),这里取TestCAB.CAB,并且要选中 “Store files using Long File Name inside Package”。点击下一步。
5)        选择“Don’t save”,一直点击下一步,直到完成。

注意:
如果控件已经在客户机注册,并且不是通过.CAB的方式注册,那么通过.CAB自动注册的时候,该控件将无法被更新。必须先手动删除该文件。

2. 对CAB文件进行数字签名
传说中数字签名之后就可以不出现提示而自动下载,所以也试试:
在\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin 中间有三个小工具,就用他们来实现数字签名。
1.Makecert.exe ---证书创建工具
2.Cert2Spc.exe ---发行者证书测试工具
3.Signcode.exe ---文件签名工具

步骤:
1)        makecert -ss name -n "CN=公司名" -sv d:\pos.pvk -r d:\pos.cer 其中sk-表示主题的密钥容器位置,ss-主题的证书存储名称, n-证书颁发对象,r-证书存储位置,-sv 导出私钥文件(为了签名使用)。注意:这个时候会让输入三次密码,三次要完全一致。
2)        使用Cert2Spc生成spc发行者证书(可选):cert2spc d:\pos.cer c:\pos.spc
3)        双击signcode,不带参数会启动签名向导。先选择要签名文件,下一步,选择“自定义”,下一步,选择“从文件选择”,添加刚生成的pos.cer证书,下一步,选择刚生成的私钥pos.pvk,再下一步,可spc证书,再一直下一步。添加时间戳,在时间戳填入http: //timestamp.verisign.com/scripts/timstamp.dll TestCAB.CAB,再下一步完成。

这样就对CAB文件进行了签名,但是这个时候点击这个文件会发现证书不可用,原因是证书没有安转。文件属性->数字证书->详细信息-〉查看证书-〉安装证书,进入安装证书向导,存放区域选择“受信任的根证书颁发机构”,点击完成即可。

在客户端测试:
1)        加入证书,浏览器-〉工具-〉Internet选项-〉内容-〉证书-〉受信任的颁发机构-〉导入证书。
2)        在有证书的情况下,如果服务器没有加入“可信任网址”,提示下载的时候会显示证书所签内容,没有证书则提示为“未知”。
3)        如果服务器已加入“可信任网址”,并且已导入证书,则不提示任何信息,在用户毫无感觉情况下下载。如果没有加入“可信任网址“,控件可以正常下载但仍然不能正常使用,与是否签名无关。

四、问题:
1.是否可以不添加“可信任网址”。
2.数字签名的作用,授权证书与不授权证书的区别。


 

原创粉丝点击