前言

  我们在浏览器中使用我们自己的一些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. 对jquery新增加的class绑定事件

    当页面加载时,就会注册所有的事件,后面通过jquery新增的内容(<div class="item"></div>),再对新增的添加事件$(".i ...

  2. wangEditor的jQuery插件化

    wangEditor是一款优秀的Web富文本编辑器.这篇随笔中讲述的wangEditor版本是2.1.22,由于它依赖于jQuery(作者打算在第三版中取消对jQuery的依赖),那么如果能使用$(& ...

  3. js--事件对象的理解2

    实例1:一串跟着鼠标飞舞的div <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  4. Java 向SQL Server插入文件数据

    package sqlserver; import java.util.Date; import java.util.UUID; import java.text.SimpleDateFormat; ...

  5. hdu_5618_Jam's problem again(cdq分治+lowbit)

    题目链接:hdu_5618_Jam's problem again 题意: 给你n个点,每个点有一个坐标(x,y,z),找出有ans个点,3个坐标都比该点小,这个点的level就为ans,然后让你输出 ...

  6. 浙大pat1019题解

    1019. General Palindromic Number (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

  7. 14.hibernate的反向生成实现全套增删改查

    图片顺序就是步骤顺序 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.

  8. 5、Struts2自定义拦截器

    一.拦截器相关知识 1.Struts2框架剖析 Holly版本生活案例: 影视公司(拍电影)    ActionMapper 传媒公司(包装明星) ActionMapping 明星           ...

  9. chapter 14_1 环境

    Lua将其所有的全局变量保存在一个常规的table中,称为“global environment”. Lua将环境table自身保存在一个全局变量_G中,_G._G等于 _G . 比如下面的代码打印出 ...

  10. log4j.properties文件的配置

    Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松 ...