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文件详细信息
- 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"
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控件的信息
- <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>
<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文件下载
- @Controller
- public class ActiveController {
- /**
- * 获取CAB文件
- * @param request
- * @param response
- * @return
- */
- @RequestMapping(value = "/SRQ24Ctl.cab",method = RequestMethod.GET)
- public ModelAndView getActiveComponent(HttpServletRequest request, HttpServletResponse response){
- response.setCharacterEncoding("UTF-8");
- String filePath = "";
- String fileName = "SRQ24Ctl.cab";
- String contentType = "application/octet-stream";
- //下载文件
- try {
- this.downloadFile(request,response,filePath,fileName,contentType);
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
- //文件下载
- public void downloadFile(HttpServletRequest request,HttpServletResponse response,String filePath,String fileName,String contentType) throws IOException {
- //设置响应编码
- response.setCharacterEncoding("UTF-8");
- //获取应用路径
- String path = request.getSession().getServletContext().getRealPath("/");
- //获取下载路径
- String downloadPath = path+filePath+fileName;
- //获取下载文件的长度
- long fileLength = new File(downloadPath).length();
- //配置下载参数
- response.setContentType(contentType);
- response.setHeader("Content-disposition","attachment;filename="+fileName);
- response.setHeader("Content-Length",String.valueOf(fileLength));
- //创建输入输出流
- InputStream bis = new BufferedInputStream(new FileInputStream(downloadPath));
- // 存放路径
- //String descPath = System.getProperty("user.home") + File.separator+"MIS_DATA"+File.separator+"CAB"+File.separator+"SRQ24Ctl.cab";
- OutputStream bos = new BufferedOutputStream(response.getOutputStream());
- //OutputStream bos = new BufferedOutputStream(new FileOutputStream(descPath));
- byte[] buffer = new byte[1024*8];
- int len = 0;
- //循环读写
- while((len = bis.read(buffer,0,buffer.length)) != -1){
- bos.write(buffer,0,len);
- bos.flush();
- }
- //关闭流
- bos.close();
- bis.close();
- }
- }
Active X控件在IE上自动下载并注册相关推荐
- 什么是Active X控件
一个典型的空间包括设计时和运行时的用户界面,唯一的IDispatch接口定义控件的方法和属 性,唯一的IConnectionPoint接口用于控件可引发的事件.除此之外,一个控件还可以包含对 其整个生 ...
- C#让TextBox控件中的滚动条自动处于最下面
文章目录 前言 一.C#TextBox控件加入滚动条 二.让TextBox控件中的滚动条自动处于最下面 1.双击TextBox控件 总结 前言 C#让TextBox控件中的滚动条自动处于最下面 以下是 ...
- 根据FileUpload控件名获取上传文件(大小)类型
/// <summary> /// 根据FileUpload控件名获取上传文件(大小)类型 /// </summary> /// <param n ...
- [开源]FreeSCADA的通道数据与控件属性关联以及自动刷新机制研究
[开源]FreeSCADA的通道数据与控件属性关联以及自动刷新机制研究 [参考文章]: 1. WPF之Binding深入探讨, 地址:http://www.cnblogs.com/cappuccino ...
- 使用控件设计窗体 上 布局主窗体 添加标签与文本框控件
使用控件设计窗体 上 布局主窗体 添加标签与文本框控件 项目目标 所需控件 窗体基本设置 新建窗体 设置背景图片 设置平铺模式 设置icon 设置文字 修改名称 直接修改类名 标签控件与文本框控件 标 ...
- iview上传控件upload,手动上传控制
iview上传控件upload,手动上传控制 场景:实现不通过action地址自动上传,而是通过点击上传按钮手动上传的实现. 效果图: 以下是完整的代码: <template><di ...
- 在EasyUI项目中使用FileBox控件实现文件上传处理
我在较早之前的随笔<基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用>Web框架介绍中介绍了基于Uploadify的文件上传操作,免费版本用的是J ...
- android 歌词控件,歌词显示控件的实现上——歌词解析
最近打算仿网易云音乐的音乐播放器,除了网络框架.接口数据等这些外,最核心的就是音乐的播放和歌词的显示. 考虑到歌词显示控件涉及到歌词解析,自定义控件的实现等等诸多方面,可能文章的篇幅上会比较冗长,同时 ...
- 使用Apache文件上传控件实现文件上传
本文使用Apache提供的第三方文件上传控件进行文件上传 1.导入第三方commons-fileupload-1.3.2.jar和commons-io-2.5.jar包 2.页面form标签需添加en ...
最新文章
- 配置ADO.NET类文件连接优化
- 数据库面试题【十一、InnoDB引擎的4大特性】
- 互联网日报 | 5月10日 星期一 | 小米成立私募股权基金管理公司;58金融升级为58数科;京东健康推出“家医保”健康险服务...
- 一文了解linux内核,一文了解Linux的系统结构
- android中获取应用程序(包)的信息,Android中获取应用程序(包)的信息PackageManager的使用(一).doc...
- WPD 从便携设备拷贝文件到PC文件不完整的解决办法
- java jar热加载技术_Java热加载(JRebel)与Devtools热部署
- C语言的那些小秘密之【内存分配】
- SAP固定资产的几个日期
- 重装系统(U盘篇+U盘复原)——保姆级教学
- 实现类CAD的交互式命令系统
- Redisson读写锁
- jquery 抓取微博_使用jQuery和RegexJavaScript进行客户端网络抓取
- 实现浏览器多标签页通信
- python 1、输入a,b,c解二元一次方程;2、克莱姆法则解线性方程;3、输入今天之后未来的天数,显示今天是星期几;4、输入一个数,检测是否能被5和6整除;5、输入人民币和美元的汇率和转换金额;
- tensorflow 一些概念
- 洛谷 P1361 小猫爬山
- my first try _ 网络适配器问题以及解决办法
- LuoguP2472 SCOI2007 蜥蜴
- 罗马字母和希腊字母读法(in math)