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进行查找,如果能查找到就说明控件注册成功。

话说回来,这种过时的技术,就没有必要在深入的折腾了,能用就行了,唉,蛋疼死了。