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

        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"


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>
注: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();
    }
}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值