OCX转成CAB
最近有个项目,用到这项内容。折腾了很长时间,总算是搞定了。
原理是这样的:在IE上安装OCX控件,控件调用动态库,然后动态库来操作POS机进行交易。动态库以及配置文件放置的位置由OCX中来确定。我们的OCX是到当前宿主程序下去读,这里也就是IE所在的目录。需要注意的是,64位系统应该将配置文件及动态库放置在Program Files (x86)下的宿主程序目录,因为插件的开发环境是在32位系统下。如果仅仅是OCX文件,那么安装的话就需要手动进行注册。转换成CAB的好处就是,浏览器打开网页后,会自动检测这个插件,然后提示安装。那么这个安装过程就完全自动化了。
在啰嗦一句,最上层是通过JavaScript来调用控件中的函数。
那么,我们的重点就在于将OCX转成CAB。
第一步,写一个.inf文件,这里我们命名MakeCAB.inf,文件内容如下:
[version]
signature="$CHINA$"
AdvancedINF=1.0
[Add.Code]
trans.ocx=trans.ocx
[trans.ocx]
file-win32-x86=thiscab
clsid={37E957C6-82B4-48AA-8C68-BE926A3589A3}
FileVersion=1,0,0,1
RegisterServer=yes
[version]
signature="$CHINA$"
AdvancedINF=1.0
[Add.Code]
trans.ocx=trans.ocx
[trans.ocx]
file-win32-x86=thiscab
clsid={37E957C6-82B4-48AA-8C68-BE926A3589A3}
FileVersion=1,0,0,1
RegisterServer=yes
需要说明的是,clsid应该是控件生成的时候就已经有了。[Add.Code]下面就是添加要打包的文件,可能还包含一些dll文件等,这里我们只有一个控件文件。如果还包含dll文件的话,那么后面还需要继续添加对dll文件的说明。这里给出一个大致的例子:
第二步,通过命令
cabarc.exe -s 6144 N E:\OCX\trans.cab MakeCAB.inf E:\OCX\trans.ocx
生成一个CAB文件。
第三步,制作数字证书。通过命令:
makecert /sv "chinaums.PVK" /n "CN=chinaums.com" chinaums.cer
,过程中需要多次输入密码,我也不知道如果前两次的输入不一致会怎样,我这里输入的密码都是一样的。这样就会生成两个文件,一个是chinaums.cer数字证书文件,另一个chinaums.PVK是私钥文件。
第四步,给CAB进行数字签名。运行signcode.exe,按照提示一部一部操作:
最后一步需要注意,如果按照默认的话可能会报错,我们这里选择第三项。然后继续往后走,就可以成功的对CAB进行数字签名。
服务端的html文件中添加如下代码:
<object id="trans"
classid="clsid:37E957C6-82B4-48AA-8C68-BE926A3589A3"
codebase="trans.CAB#version=1,0,0,1"
style="display:none;" >
</object>
<object id="trans"
classid="clsid:37E957C6-82B4-48AA-8C68-BE926A3589A3"
codebase="trans.CAB#version=1,0,0,1"
style="display:none;" >
</object>
clsid按照自己的来。Version也按照自己的配置文件来,CAB名字也一样,该成自己的名字。JavaScript调用示例如下:
function doQD(){
var trans=document.getElementById("trans");
var wsh=trans.DoICBCZJMisTranSTD("4001","","","","");
alert(wsh);
}
然后将CAB文件放在和这个html同目录下,启动服务,IE打开就会提示你自动安装。但是,由于这里的证书是自己做的,肯定不会被IE信任,那么这就需要对浏览器做一定的设置。进入IE的Internet选项,如下,注意打钩的选项卡:
这样就算完成了。看控件是否安装成功,运行regedit命令,然后编辑à查找,输入您的clsid进行查找,如果能查找到就说明控件注册成功。
话说回来,这种过时的技术,就没有必要在深入的折腾了,能用就行了,唉,蛋疼死了。