2017年09月19日 10:14:32
阅读数:836

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

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

1、inf文件详细信息

[plain] view plaincopyprint?
  1. version:指定文件的版本信息;
  2. [version]Signature="$Chicago$"
  3. AdvancedINF=2.0
  4. Defaultinstall:是指CAB文件默认安装的信息,CopyFiles是要复制到目的路径下的文件,RegisterOCXs是要注册的OCX控件信息;
  5. [Defaultinstall]
  6. CopyFiles=files
  7. RegisterOCXs=RegisterFiles
  8. SourceDisksNames:是指源文件的名称;
  9. [SourceDisksNames]
  10. 1=%DiskName%,SRQ24Ctl.cab,1
  11. SourceDisksFiles:是指要注册的文件;
  12. [SourceDisksFiles]
  13. SRQ24Ctl.ocx=1
  14. [RegisterFiles]
  15. %30%\Windows\SysWOW64\SRQ24Ctl.ocx
  16. DestinationDirs:文件安装的目录,SysWoW64是64位操作系统的安装路径;
  17. [DestinationDirs]
  18. files=30,Windows\SysWOW64
  19. files:是指复制到目的路径下的源文件;
  20. [files]
  21. SRQ24Ctl.ocx=SRQ24Ctl.ocx
  22. Cryptlib.dll=Cryptlib.dll
  23. DAFK.dll=DAFK.dll
  24. daiclib.dll=daiclib.dll
  25. DAUK.dll=DAUK.dll
  26. DHKEY.dll=DHKEY.dll
  27. DKEY.dll=DKEY.dll
  28. DSFK.dll=DSFK.dll
  29. dtall.dll=dtall.dll
  30. DticTokenApi.dll=DticTokenApi.dll
  31. DTLog.dll=DTLog.dll
  32. GenEccKey.dll=GenEccKey.dll
  33. icapi.dll=icapi.dll
  34. IcForCsp.dll=IcForCsp.dll
  35. libDADer.dll=libDADer.dll
  36. libeay32.dll=libeay32.dll
  37. nodrvkey.dll=nodrvkey.dll
  38. pklibv3.dll=pklibv3.dll
  39. SM3.dll=SM3.dll
  40. storkey.dll=storkey.dll
  41. xcsp_eclib.dll=xcsp_eclib.dll
  42. SRQ24Ctl.ocx:是注册控件的详细信息;file-win32-x86中的file是指文件、win32是指windows系统、x86指系统位数;RegisterServer=yes说明该文件自动注册,clsid指文件的注册码;
  43. [SRQ24Ctl.ocx]
  44. file-win32-x86=thiscab
  45. RegisterServer=yes
  46. clsid={09AC9B85-5A51-4106-AC35-5B8025A2C18C}
  47. DestDir=11
  48. FileVersion=3,0,0,0
  49. String:指明文件的目的路径;
  50. [String]
  51. DiskName="Windows\SysWOW64"
version:指定文件的版本信息;[version]Signature="$Chicago$"
AdvancedINF=2.0Defaultinstall:是指CAB文件默认安装的信息,CopyFiles是要复制到目的路径下的文件,RegisterOCXs是要注册的OCX控件信息;[Defaultinstall]CopyFiles=filesRegisterOCXs=RegisterFilesSourceDisksNames:是指源文件的名称;[SourceDisksNames]1=%DiskName%,SRQ24Ctl.cab,1SourceDisksFiles:是指要注册的文件;[SourceDisksFiles]SRQ24Ctl.ocx=1[RegisterFiles]%30%\Windows\SysWOW64\SRQ24Ctl.ocxDestinationDirs:文件安装的目录,SysWoW64是64位操作系统的安装路径;[DestinationDirs]files=30,Windows\SysWOW64files:是指复制到目的路径下的源文件;[files]SRQ24Ctl.ocx=SRQ24Ctl.ocxCryptlib.dll=Cryptlib.dllDAFK.dll=DAFK.dlldaiclib.dll=daiclib.dllDAUK.dll=DAUK.dllDHKEY.dll=DHKEY.dllDKEY.dll=DKEY.dllDSFK.dll=DSFK.dlldtall.dll=dtall.dllDticTokenApi.dll=DticTokenApi.dllDTLog.dll=DTLog.dllGenEccKey.dll=GenEccKey.dllicapi.dll=icapi.dllIcForCsp.dll=IcForCsp.dlllibDADer.dll=libDADer.dlllibeay32.dll=libeay32.dllnodrvkey.dll=nodrvkey.dllpklibv3.dll=pklibv3.dllSM3.dll=SM3.dllstorkey.dll=storkey.dllxcsp_eclib.dll=xcsp_eclib.dllSRQ24Ctl.ocx:是注册控件的详细信息;file-win32-x86中的file是指文件、win32是指windows系统、x86指系统位数;RegisterServer=yes说明该文件自动注册,clsid指文件的注册码;[SRQ24Ctl.ocx]file-win32-x86=thiscabRegisterServer=yesclsid={09AC9B85-5A51-4106-AC35-5B8025A2C18C}DestDir=11FileVersion=3,0,0,0String:指明文件的目的路径;[String]DiskName="Windows\SysWOW64"

2、在jsp页面指定ocx控件的信息

[html] view plaincopyprint?
  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文件下载

[java] view plaincopyprint?
  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. String path = request.getSession().getServletContext().getRealPath("/");
  29. //获取下载路径
  30. String downloadPath = path+filePath+fileName;
  31. //获取下载文件的长度
  32. long fileLength = new File(downloadPath).length();
  33. //配置下载参数
  34. response.setContentType(contentType);
  35. response.setHeader("Content-disposition","attachment;filename="+fileName);
  36. response.setHeader("Content-Length",String.valueOf(fileLength));
  37. //创建输入输出流
  38. InputStream bis = new BufferedInputStream(new FileInputStream(downloadPath));
  39. // 存放路径
  40. //String descPath = System.getProperty("user.home") + File.separator+"MIS_DATA"+File.separator+"CAB"+File.separator+"SRQ24Ctl.cab";
  41. OutputStream bos = new BufferedOutputStream(response.getOutputStream());
  42. //OutputStream bos = new BufferedOutputStream(new FileOutputStream(descPath));
  43. byte[] buffer = new byte[1024*8];
  44. int len = 0;
  45. //循环读写
  46. while((len = bis.read(buffer,0,buffer.length)) != -1){
  47. bos.write(buffer,0,len);
  48. bos.flush();
  49. }
  50. //关闭流
  51. bos.close();
  52. bis.close();
  53. }
  54. }

Active X控件在IE上自动下载并注册相关推荐

  1. 什么是Active X控件

    一个典型的空间包括设计时和运行时的用户界面,唯一的IDispatch接口定义控件的方法和属 性,唯一的IConnectionPoint接口用于控件可引发的事件.除此之外,一个控件还可以包含对 其整个生 ...

  2. C#让TextBox控件中的滚动条自动处于最下面

    文章目录 前言 一.C#TextBox控件加入滚动条 二.让TextBox控件中的滚动条自动处于最下面 1.双击TextBox控件 总结 前言 C#让TextBox控件中的滚动条自动处于最下面 以下是 ...

  3. 根据FileUpload控件名获取上传文件(大小)类型

    /// <summary>     /// 根据FileUpload控件名获取上传文件(大小)类型     /// </summary>     /// <param n ...

  4. [开源]FreeSCADA的通道数据与控件属性关联以及自动刷新机制研究

    [开源]FreeSCADA的通道数据与控件属性关联以及自动刷新机制研究 [参考文章]: 1. WPF之Binding深入探讨, 地址:http://www.cnblogs.com/cappuccino ...

  5. 使用控件设计窗体 上 布局主窗体 添加标签与文本框控件

    使用控件设计窗体 上 布局主窗体 添加标签与文本框控件 项目目标 所需控件 窗体基本设置 新建窗体 设置背景图片 设置平铺模式 设置icon 设置文字 修改名称 直接修改类名 标签控件与文本框控件 标 ...

  6. iview上传控件upload,手动上传控制

    iview上传控件upload,手动上传控制 场景:实现不通过action地址自动上传,而是通过点击上传按钮手动上传的实现. 效果图: 以下是完整的代码: <template><di ...

  7. 在EasyUI项目中使用FileBox控件实现文件上传处理

    我在较早之前的随笔<基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用>Web框架介绍中介绍了基于Uploadify的文件上传操作,免费版本用的是J ...

  8. android 歌词控件,歌词显示控件的实现上——歌词解析

    最近打算仿网易云音乐的音乐播放器,除了网络框架.接口数据等这些外,最核心的就是音乐的播放和歌词的显示. 考虑到歌词显示控件涉及到歌词解析,自定义控件的实现等等诸多方面,可能文章的篇幅上会比较冗长,同时 ...

  9. 使用Apache文件上传控件实现文件上传

    本文使用Apache提供的第三方文件上传控件进行文件上传 1.导入第三方commons-fileupload-1.3.2.jar和commons-io-2.5.jar包 2.页面form标签需添加en ...

最新文章

  1. 配置ADO.NET类文件连接优化
  2. 数据库面试题【十一、InnoDB引擎的4大特性】
  3. 互联网日报 | 5月10日 星期一 | 小米成立私募股权基金管理公司;58金融升级为58数科;京东健康推出“家医保”健康险服务...
  4. 一文了解linux内核,一文了解Linux的系统结构
  5. android中获取应用程序(包)的信息,Android中获取应用程序(包)的信息PackageManager的使用(一).doc...
  6. WPD 从便携设备拷贝文件到PC文件不完整的解决办法
  7. java jar热加载技术_Java热加载(JRebel)与Devtools热部署
  8. C语言的那些小秘密之【内存分配】
  9. SAP固定资产的几个日期
  10. 重装系统(U盘篇+U盘复原)——保姆级教学
  11. 实现类CAD的交互式命令系统
  12. Redisson读写锁
  13. jquery 抓取微博_使用jQuery和RegexJavaScript进行客户端网络抓取
  14. 实现浏览器多标签页通信
  15. python 1、输入a,b,c解二元一次方程;2、克莱姆法则解线性方程;3、输入今天之后未来的天数,显示今天是星期几;4、输入一个数,检测是否能被5和6整除;5、输入人民币和美元的汇率和转换金额;
  16. tensorflow 一些概念
  17. 洛谷 P1361 小猫爬山
  18. my first try _ 网络适配器问题以及解决办法
  19. LuoguP2472 SCOI2007 蜥蜴
  20. 罗马字母和希腊字母读法(in math)

热门文章

  1. 网吧服务器网络维护教程,网管员维护服务器过程中的反黑技巧
  2. iphone 4s 激活错误
  3. java 基础 练习 幸运小游戏
  4. 动词ing基本用法_(完整版)英语动词ing的用法
  5. 财路网每日原创推送:轻信微信上的投资专家,男子亏损四十多万!
  6. 了解茶叶读这一篇就够了:茶叶分类及十大名茶
  7. 做人做事,必须要搞清楚的9个顺序
  8. 基于微信小程序的面包店在线服务系统
  9. GDI基础函数使用绘制线条和图形
  10. Linux 软连接和硬链接