Active X控件在IE上自动下载并注册


2017年09月19日 10:14:32   

        ActiveX控件对于大多数开发人员来说并不陌生,很多情况下我们都会利用ActiveX控件调用一些证书。ActiveX控件注册分为两种:一种手动注册;一种自动注册。

        接下来,我将介绍一下ActiveX在IE上实现自动下载和注册。首先,我们需要将注册的控件、所依赖的库、安装文件(.inf)打包成CAB文件。然后将CAB文件放入WEB项目中。如何打包CAB文件,我在这里不加以说明,需要用到的时候,自己上网查询一下就能完成。重点说一下inf文件,这是这个CAB文件和实现下载并自动注册的重中之重,如果inf文件不正确,CAB包不能正常下载和注册。

1、inf文件详细信息
  1. version:指定文件的版本信息;  
  2.   
  3. [version]Signature="$Chicago$"  
  4. AdvancedINF=2.0  
  5.   
  6. Defaultinstall:是指CAB文件默认安装的信息,CopyFiles是要复制到目的路径下的文件,RegisterOCXs是要注册的OCX控件信息;  
  7.   
  8. [Defaultinstall]  
  9.   
  10. CopyFiles=files  
  11.   
  12. RegisterOCXs=RegisterFiles  
  13.   
  14. SourceDisksNames:是指源文件的名称;  
  15.   
  16. [SourceDisksNames]  
  17.   
  18. 1=%DiskName%,SRQ24Ctl.cab,1  
  19.   
  20. SourceDisksFiles:是指要注册的文件;  
  21.   
  22. [SourceDisksFiles]  
  23.   
  24. SRQ24Ctl.ocx=1  
  25.   
  26. [RegisterFiles]  
  27.   
  28. %30%\Windows\SysWOW64\SRQ24Ctl.ocx  
  29.   
  30. DestinationDirs:文件安装的目录,SysWoW64是64位操作系统的安装路径;  
  31.   
  32. [DestinationDirs]  
  33.   
  34. files=30,Windows\SysWOW64  
  35.   
  36. files:是指复制到目的路径下的源文件;  
  37.   
  38. [files]  
  39.   
  40. SRQ24Ctl.ocx=SRQ24Ctl.ocx  
  41.   
  42. Cryptlib.dll=Cryptlib.dll  
  43.   
  44. DAFK.dll=DAFK.dll  
  45.   
  46. daiclib.dll=daiclib.dll  
  47.   
  48. DAUK.dll=DAUK.dll  
  49.   
  50. DHKEY.dll=DHKEY.dll  
  51.   
  52. DKEY.dll=DKEY.dll  
  53.   
  54. DSFK.dll=DSFK.dll  
  55.   
  56. dtall.dll=dtall.dll  
  57.   
  58. DticTokenApi.dll=DticTokenApi.dll  
  59.   
  60. DTLog.dll=DTLog.dll  
  61.   
  62. GenEccKey.dll=GenEccKey.dll  
  63.   
  64. icapi.dll=icapi.dll  
  65.   
  66. IcForCsp.dll=IcForCsp.dll  
  67.   
  68. libDADer.dll=libDADer.dll  
  69.   
  70. libeay32.dll=libeay32.dll  
  71.   
  72. nodrvkey.dll=nodrvkey.dll  
  73.   
  74. pklibv3.dll=pklibv3.dll  
  75.   
  76. SM3.dll=SM3.dll  
  77.   
  78. storkey.dll=storkey.dll  
  79.   
  80. xcsp_eclib.dll=xcsp_eclib.dll  
  81.   
  82. SRQ24Ctl.ocx:是注册控件的详细信息;file-win32-x86中的file是指文件、win32是指windows系统、x86指系统位数;RegisterServer=yes说明该文件自动注册,clsid指文件的注册码;  
  83.   
  84. [SRQ24Ctl.ocx]  
  85.   
  86. file-win32-x86=thiscab  
  87.   
  88. RegisterServer=yes  
  89.   
  90. clsid={09AC9B85-5A51-4106-AC35-5B8025A2C18C}  
  91.   
  92. DestDir=11  
  93.   
  94. FileVersion=3,0,0,0  
  95.   
  96. String:指明文件的目的路径;  
  97.   
  98. [String]  
  99.   
  100. DiskName="Windows\SysWOW64"  
version:指定文件的版本信息;

[version]Signature="$Chicago$"
AdvancedINF=2.0

Defaultinstall:是指CAB文件默认安装的信息,CopyFiles是要复制到目的路径下的文件,RegisterOCXs是要注册的OCX控件信息;

[Defaultinstall]

CopyFiles=files

RegisterOCXs=RegisterFiles

SourceDisksNames:是指源文件的名称;

[SourceDisksNames]

1=%DiskName%,SRQ24Ctl.cab,1

SourceDisksFiles:是指要注册的文件;

[SourceDisksFiles]

SRQ24Ctl.ocx=1

[RegisterFiles]

%30%\Windows\SysWOW64\SRQ24Ctl.ocx

DestinationDirs:文件安装的目录,SysWoW64是64位操作系统的安装路径;

[DestinationDirs]

files=30,Windows\SysWOW64

files:是指复制到目的路径下的源文件;

[files]

SRQ24Ctl.ocx=SRQ24Ctl.ocx

Cryptlib.dll=Cryptlib.dll

DAFK.dll=DAFK.dll

daiclib.dll=daiclib.dll

DAUK.dll=DAUK.dll

DHKEY.dll=DHKEY.dll

DKEY.dll=DKEY.dll

DSFK.dll=DSFK.dll

dtall.dll=dtall.dll

DticTokenApi.dll=DticTokenApi.dll

DTLog.dll=DTLog.dll

GenEccKey.dll=GenEccKey.dll

icapi.dll=icapi.dll

IcForCsp.dll=IcForCsp.dll

libDADer.dll=libDADer.dll

libeay32.dll=libeay32.dll

nodrvkey.dll=nodrvkey.dll

pklibv3.dll=pklibv3.dll

SM3.dll=SM3.dll

storkey.dll=storkey.dll

xcsp_eclib.dll=xcsp_eclib.dll

SRQ24Ctl.ocx:是注册控件的详细信息;file-win32-x86中的file是指文件、win32是指windows系统、x86指系统位数;RegisterServer=yes说明该文件自动注册,clsid指文件的注册码;

[SRQ24Ctl.ocx]

file-win32-x86=thiscab

RegisterServer=yes

clsid={09AC9B85-5A51-4106-AC35-5B8025A2C18C}

DestDir=11

FileVersion=3,0,0,0

String:指明文件的目的路径;

[String]

DiskName="Windows\SysWOW64"


2、在jsp页面指定ocx控件的信息
 
  
  1. <OBJECT id="PXCtl" style="display:none" codebase="<%=request.getContextPath() %>/SRQ24Ctl.cab#version=1,6,0,1"  
  2.         classid="CLSID:09AC9B85-5A51-4106-AC35-5B8025A2C18C" type="application/x-oleobject" VIEWASTEXT>  
  3. </OBJECT>  
<OBJECT id="PXCtl" style="display:none" codebase="<%=request.getContextPath() %>/SRQ24Ctl.cab#version=1,6,0,1"
        classid="CLSID:09AC9B85-5A51-4106-AC35-5B8025A2C18C" type="application/x-oleobject" VIEWASTEXT>
</OBJECT>
注:id是唯一标识,codebase指明CAB文件的位置和版本信息,clsid是要注册控件的信息。
3、在后台实现CAB文件下载
  1. @Controller  
  2. public class ActiveController {  
  3.     /** 
  4.      * 获取CAB文件 
  5.      * @param request 
  6.      * @param response 
  7.      * @return 
  8.      */  
  9.     @RequestMapping(value = "/SRQ24Ctl.cab",method = RequestMethod.GET)  
  10.     public ModelAndView getActiveComponent(HttpServletRequest request, HttpServletResponse response){  
  11.         response.setCharacterEncoding("UTF-8");  
  12.         String filePath = "";  
  13.         String fileName = "SRQ24Ctl.cab";  
  14.         String contentType = "application/octet-stream";  
  15.         //下载文件  
  16.         try {  
  17.             this.downloadFile(request,response,filePath,fileName,contentType);  
  18.         } catch (IOException e) {  
  19.             e.printStackTrace();  
  20.         }  
  21.         return null;  
  22.     }  
  23.     //文件下载  
  24.     public void downloadFile(HttpServletRequest request,HttpServletResponse response,String filePath,String fileName,String contentType) throws IOException {  
  25.         //设置响应编码  
  26.         response.setCharacterEncoding("UTF-8");  
  27.   
  28.         //获取应用路径  
  29.         String path = request.getSession().getServletContext().getRealPath("/");  
  30.         //获取下载路径  
  31.         String downloadPath = path+filePath+fileName;  
  32.         //获取下载文件的长度  
  33.         long fileLength = new File(downloadPath).length();  
  34.   
  35.         //配置下载参数  
  36.         response.setContentType(contentType);  
  37.         response.setHeader("Content-disposition","attachment;filename="+fileName);  
  38.         response.setHeader("Content-Length",String.valueOf(fileLength));  
  39.         //创建输入输出流  
  40.         InputStream bis = new BufferedInputStream(new FileInputStream(downloadPath));  
  41.         // 存放路径  
  42.         //String descPath = System.getProperty("user.home") + File.separator+"MIS_DATA"+File.separator+"CAB"+File.separator+"SRQ24Ctl.cab";  
  43.         OutputStream bos = new BufferedOutputStream(response.getOutputStream());  
  44.         //OutputStream bos = new BufferedOutputStream(new FileOutputStream(descPath));  
  45.         byte[] buffer = new byte[1024*8];  
  46.         int len = 0;  
  47.         //循环读写  
  48.         while((len = bis.read(buffer,0,buffer.length)) != -1){  
  49.             bos.write(buffer,0,len);  
  50.             bos.flush();  
  51.         }  
  52.         //关闭流  
  53.         bos.close();  
  54.         bis.close();  
  55.     }  
  56. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值