前言

  我们在浏览器中使用我们自己的一些OCX,或者是DLL这一类的文件,在X86的机器上需要我们手动将这些文件拷贝到Windows/System32 文件夹下面去,然后通过Dos命令regsvr32 test.ocx注册之后才能够使用。
  原来我们一直采用安装包的方式,就是客户端需要安装我们提供的一个exe安装包,这个exe安装包的目的就是将一堆如OCX,DLL之类的文件打包 , 并在客户端安装的时候将这些文件统统拷贝到Windows/System32文件夹下面去, 然后通过Dos命令regsvr32 test.ocx注册文件。但是我们使用这样的方式,会有一个缺陷,就是浏览器端必须要安装我们提供的exe安装包才能使用系统,否则就不能。

介绍

  微软定义根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。

  做过ActiveX控件的朋友都知道,使用ActiveX控件,浏览器端就可以自动下载ActiveX控件到Windows/System32,并进行注册。这样我们既不需要手动拷贝文件,又不需要去安装什么exe安装包,还能实现我们想要的功能,这岂不是一举两得。

准备工作

  要实现ActiveX控件进行自动下载就需要将文件打包成Cab文件,然后浏览器去下载Cab文件,然后解压。

  (1)我们需要准备以下文件:

  用于将ActiveX控件进行打包并加数据鉴名的工具集,如图1:
  makecert.exe 制作cer格式的证书,即X.509证书,同时可以创建私钥和公钥。
  cert2spc.exe  将cer格式证书转换成spc格式证书,即PKCS #7证书。
  cabarc.exe   将ocx打包成cab。
  signcode.exe 将证书签署到ocx上去。
  chktrust.exe  检查签署证书后的ocx是否正确。
  certmgr.exe 是管理证书用的。
  ActvxDoc.exe 用于查看ocx控件的工具

                    (图1)

  (2)用于进行打包用的ocx控件XXXX.ocx。

  (3)用于进行ocx控件注册的XXXX.inf。

  (4)用于ocx文件所引用的文件如:XXXX.dll , XXXX.lic,XXXX.ico等,如图2。

                      (图2)

步骤

我们现在开始来制作cab文件啦~~~

  • 我们先把所有的文件放到E:\browseocx 目录下面去,如图3。

                          (图3)

  • 单击“开始”->“运行(R)”-> 输入“cmd” -> 回车 -> 进入到操作的控件所在的目录,如图4所示

                          (图4)

  • 创建PVK文件(私人密匙文件),在命令行中输入“makecert -sk BrowseOcx BrowseOcx.pvk -n CN=XXXXXXXX”,然后回车,如图5所示

                          (图5)

    创建CER文件(公司证书),在命令行中输入“makecert -sk BrowseOcx.pvk BrowseOcx.cer”,然后回车,如图6所示,若出现“Successed”提示,则

    会在E:\browseocx目录下生成BrowseOcx.cer文件,如图7所示

                          (图6)

                          (图7)

  • 创建SPC测试软件出版商证明书,在命令行中输入“cert2spc BrowseOcx.cer BrowseOcx.spc”,然后回车,如图8所示,若出现“Successed”提示,
  • 则会在E:\browseocx目录下生成BrowseOcx. spc文件,如图9所示 
  •                       (图8)

                                          (图9)

  • 创建INF文件,用记录本编辑以下信息
  • [version]

    signature="$Chicago$"

    AdvancedINF=2.0

    [Add.Code]

    GDIPLUS.DLL=GDIPLUS.DLL

    mfc100.dll=mfc100.dll

    msvcp100.dll=msvcp100.dll

    msvcr100.dll=msvcr100.dll

    acemfcd.dll=acemfcd.dll

    GoldenClient.dll=GoldenClient.dll

    GoldenObjects.dll=GoldenObjects.dll

    piapi32.dll=piapi32.dll

    RtdbBridge.dll=RtdbBridge.dll

    BrowseOcx.ocx=BrowseOcx.ocx

    BrowseOcx.lic=BrowseOcx.lic

    BrowseOCX.ico=BrowseOCX.ico

    [GDIPLUS.DLL]

    file-win32-x86=thiscab

    RegisterServer=yes

    DestDir=11

    FileVersion=6,0,3260,0

    [mfc100.dll]

    file-win32-x86=thiscab

    RegisterServer=yes

    DestDir=11

    FileVersion=10,0,40219,1

    [msvcp100.dll]

    file-win32-x86=thiscab

    RegisterServer=yes

    DestDir=11

    FileVersion=10,0,40219,1

    [msvcr100.dll]

    file-win32-x86=thiscab

    RegisterServer=yes

    DestDir=11

    FileVersion=10,0,40219,1

    [acemfcd.dll]

    file-win32-x86=thiscab

    RegisterServer=yes

    DestDir=11

    FileVersion=5,4,1,0

    [GoldenClient.dll]

    file-win32-x86=thiscab

    RegisterServer=yes

    DestDir=11

    FileVersion=1,0,3,11

    [GoldenObjects.dll]

    file-win32-x86=thiscab

    RegisterServer=yes

    DestDir=11

    FileVersion=1,0,3,11

    [piapi32.dll]

    file-win32-x86=thiscab

    RegisterServer=yes

    DestDir=11

    FileVersion=1,6,1,10

    [RtdbBridge.dll]

    file-win32-x86=thiscab

    RegisterServer=yes

    DestDir=11

    FileVersion=1,0,0,0

    [BrowseOcx.ocx]

    file-win32-x86=thiscab

    clsid={F6157CB2-D9CD-4780-B3BF-C1EF13D48446}

    RegisterServer=yes

    DestDir=11

    FileVersion=2,0,1,0

    [BrowseOcx.lic]

    file-win32-x86=thiscab

    RegisterServer=no

    DestDir=11

    [BrowseOCX.ico]

    file-win32-x86=thiscab

    RegisterServer=no

    DestDir=11

                                (图10)

                            (图11)

在BrowseOcx.inf的内容里,[version]和[Add.Code]项是必须的,[Add.Code]的键值项的多少取决于以下你所配制项的多少。

[mfc100.dll]、[msvcp100.dll]就是上面我所说不是必须的项,只要你想把mfc100.dll、msvcp100.dll包括在发布包里,那这么两项就必

须写在inf里,而这三项的具体内容是固定的,可复制过去即可。最为关键的就是[BrowseOcx.ocx]项,其中有clsid和FileVersion就

是BrowseOcx.ocx的classId和version,这要求必须一至,否我们发布出去的CAB包时不能在客户端自动更新下载安装。说到这里,那我们如

何才能知道BrowseOcx.ocx里面的classId和version呢?我在上面的必备条件里介绍到有一个用于查看ocx控件的工具ActvxDoc,对,就是用

它,我们双击这个文件运行它,win7下可能不能运行。

创建CAB文件,在命令行中输入“cabarc -s 6144 n BrowseOcx.cab GDIPLUS.DLL mfc100.dll msvcp100.dll msvcr100.d

ll acemfcd.dll GoldenClient.dll GoldenObjects.dll piapi32.dll RtdbBridge.dll BrowseOcx.lic BrowseOCX.ico BrowseOc

x.ocx BrowseOcx.inf”,然后回车,如图12所示:

                      (图12)

使用Code Signing Wizard签署一个CAB文件,首先双击运行工具集里面的signcode.exe(或在命令行里直接输入“signcode”后回

车),系统会弹出如图13所示的数字签名向导:

                    (图13)

单击“下一步(N)”按钮,来到图14所示,选择要进行数字签名的且已做成CAB包的文件BrowseOcx.cab文件。

                  (图14)

选择好CAB包后单击“下一步(N)”按钮,在选择想要的签名类型里选择“自定议(C)”并单击“下一步(N)”按钮,如

图15所示。

                  (图15)

接下来单击“从文件选择(F)”按钮,选择刚刚制作的BrowseOcx.cer,如图16所示:

                (图16)

在图16中单击“下一步(N)”按钮来到图17,然后在图17里选择“CSP中的私钥(K)”

                  (图17)

在图17中单击“下一步(N)”按钮,然后在图18中的散列算法中选择“shal”,并单击“下一步(N)”按钮

                  (图18)

在“证书路径中的证书”中选择“证书路径中的所有证书,包括根证书(C)”,在“其它证书(可选)”中选择“包括在以

下PKCS #7 证书(.p7b)文件中的证书(P):”,并单击“浏览(R)…”按钮选择BrowseOcx.spc文件,选择完后

单击“下一步(N)”按钮,如图19所示:

                (图19)

接下来在弹出的“数据描述”窗口中输入公司的名称和网址并单击“下一步(N)”按钮,如图20所示(这的描述,必

须要和先前第三部制作PVK的描述一致)

                  (图20)

现大部份工作都已完成,在接下来的一步当中是可选的操作,其作用只是为CAB加入时间戳,此步骤完全可以不做,如

图21所示:

                (图21)

完成

                  (图22)

这个时候我们已经完成制作cab包

在服务器上的html中加入OBJECT标签:

浏览器有的时候可能会禁用掉ActiveX控件,我们需要主动设置浏览器选项。

注意:打开IE浏览器工具Internet选项安全自定义级别启用所有ActiveX控件

如:

<OBJECT id="Chart" codeBase="./Download/CfxIEAx.cab#Version=5,5,3,0" type="application/x-oleobject" heigh

t="910" width="1870" classid="CLSID:21F49842-BFA9-11d2-A89C-00104B62BDDA" VIEWASTEXT>

  <PARAM NAME="LICENSE" VALUE="./License/CfxIE.lic" />

</OBJECT>

ActiveX控件打包成Cab实现浏览器自动下载安装的更多相关文章

  1. ActiveX控件打包成Cab置于网页中自动下载安装(转载)

    原文出自http://www.iteye.com/topic/110834 [背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必 ...

  2. ActiveX控件打包成Cab置于网页中自动下载安装 [转]

    http://blog.sina.com.cn/s/blog_520c32270100nopj.html 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用, ...

  3. ActiveX控件打包成Cab置于网页中自动下载安装

    [背景] http://www.360doc.com/content/13/1120/20/10159093_330853247.shtml 做过ActiveX控件的朋友都知道,要想把自己做的Acti ...

  4. OCX控件打包成CAB并实现数字签名过程

      OCX打包CAB并签名过程 一.打包cab 制作cab文件时需要将所有的相关文件都包含进去,可以通过Depends(VC自带的)检查需要的文件.使用inf文件将这些东西都写进去. 1.制作inf文 ...

  5. ActiveX控件打包、签名、嵌入详解

    ActiveX控件打包.签名.嵌入详解 前言 在我们的一个项目中,使用到了大华网络监控摄像头枪机,网络上下载了其ActiveX插件,但是发现其所提供的类库没有打包处理.这就导致我们每次给用户安装的时候 ...

  6. Skyline TerraExplorer Pro(等ActiveX控件)在Google Chrome浏览器的运行方法

    首先感谢ActiveX for Chrome 网银助手(np-activex)这个项目(https://code.google.com/p/np-activex/),解决了我们困惑很久的问题——在Ch ...

  7. 将OCX控件打包成EXE,实现双击后自动注册<转>

    工具:2345好压[其他压缩软件应该大同小异] 第一步:首先将要打包的OCX控件,以及该控件所依赖的DLL文件放到桌面: 第二步:1.新建文本文档,取名 register.txt,文档内写入   re ...

  8. 浏览器使用ActiveX控件

    在IE中使用ActiveX控件,需要使用HTML中的标志是<OBJECT>,该标记几个重要的参数特性有:1.ID:为控件提供一个标识名称,为HTML代码提供一种访问该控件的入口.2.CLA ...

  9. 给控件做数字签名之一:将控件打包为Web发布包 [转]

    微软代码签名证书使用指南 http://www.wotrust.com/support/signcode_guide.htm 签名重要性:http://www.wotrust.com/FAQ/whyS ...

随机推荐

  1. android 5.0 -- Palette

    Palette用来从图片资源中获取颜色内容. 下面是个对颜色值使用的工具类: public class PaletteUtils { public static int getColorWithDef ...

  2. ACdream 1063 平衡树

    写的很丑的字典树.听王大神的话  需要改进. #include<stdio.h> #include<string.h> #include<math.h> #incl ...

  3. Eclipse Kepler maven工程配置JDK1.8

    首先需要下载插件:"Help" --> "Market Place" --> Search for java 8 kepler. install J ...

  4. jQuery第六章

    jQuery与Ajax应用 一.Ajax的优势和不足 1.Ajax的优势: (1)不需要插件支持:不需要任何浏览器插件就可以被绝大多数浏览器支持 (2)优秀的用户体验:能在不刷新整个页面的前提下更新数 ...

  5. JavaScript的DOM(文档对象)基础语法总结2

    1.getAttribute()方法,通过元素节点的属性名称获取属性的值. //语法 elementNode.getAttribute(name) //element(元素);Node(节点) //注 ...

  6. 安装Python package

    下载对应的源码,往往都是.tar.gz,.zip的压缩包,解压. 打开windows的cmd,切换到对应目录 C: cd C:\xx setup.py install  

  7. 使用NGUI实现拖拽功能(拼图小游戏)

    上一次用UGUI实现了拼图小游戏,这次,我们来用NGUI来实现 实现原理 NGUI中提供了拖拽的基类UIDragDropItem,所以我们要做的就是在要拖拽的图片上加一个继承于该类的脚本,并实现其中的 ...

  8. 使用紧凑的序列化器,数倍提升性能 —— ESFramework 4.0 快速上手(11)

    在分布式通信系统中,网络传递的是二进制流,而内存中是我们基于对象模型构建的各种各样的对象,当我们需要将一个对象通过网络传递给另一个节点时,首先需要将其序列化为字节流,然后通过网络发送给目标节点,目标节 ...

  9. 关于jquery选择器中:first和:first-child和:first-of-type的区别及:nth-child()和:nth-of-type()的区别

    :first:选择第一个出现符合的元素 :first-child:选择限制条件中的第一个元素,并且必须和冒号前面的标签一致 :first-of-type:选择所有限制条件下的第一个冒号前面的标签元素, ...

  10. C++对象模型笔记之程序设计模型

    C++程序设计模型支持三种程序设计模型 1.程序模型(procedural model) 可以理解为过程化模型,就像C一样 2.抽象数据类型模型(ADT) 数据结构教材里有说过,查了下资料也不是很明确 ...