Web发布cab文件打包的ActiveX控件总结
一、程序描述:
程序环境: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.filesRegisterOCXs=RegisterFiles[RInstallApplicationFiles]CopyFiles=install.filesRegisterOCXs=RegisterFiles[DestinationDirs]install.files=11[SourceDisksNames] 1=%DiskName%,TestCAB.CAB,1[Add.Code]pcpos.ocx=pcpos.ocxComm.dll=comm.dllpcpos.dll=pcpos.dllTCPCLNT.dll=TCPCLNT.dll[install.files]pcpos.ocx=pcpos.ocxComm.dll=comm.dllpcpos.dll=pcpos.dllTCPCLNT.dll=TCPCLNT.dll[SourceDisksFiles]pcpos.ocx=1Comm.dll=1pcpos.dll=1TCPCLNT.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