zoukankan      html  css  js  c++  java
  • ActiveX控件打包成Cab置于网页中自动下载安装

    [背景]

    http://www.360doc.com/content/13/1120/20/10159093_330853247.shtml

           做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必须进行本地的注册,也就是说用户得首先要把该ActiveX控件(test.ocx)放在本机的%system%/system32下,然后运行DOS工具里面运行regsvr32 test.ocx命令进行注册。但如果真是这么去做的话,那么代表着你处于危险之中了,因为您是通过让用户自己去部署设置环境来达到你的目的,这就失去软件项目本身所存在的价值。那么面对这种情况,我们应该如何解决呢?聪明的你一定会很快就想到,我们可以使用户在客户端自动下载安装该ActiveX控件,这样一来即可以实现我们所想要的功能,又不需要用户自己去部署设置环境,这岂不是一举两得。

    [必备条件]

    一、用于将ActiveX控件进行打包并加数据鉴名的工具集:

    makecert.exe 制作cer格式的证书,即X.509证书,同时可以创建私钥和公钥。

    cert2spc.exe  将cer格式证书转换成spc格式证书,即PKCS #7证书。

    cabarc.exe   将ocx打包成cab。

    signcode.exe 将证书签署到ocx上去。

    chktrust.exe  检查签署证书后的ocx是否正确。

    certmgr.exe  是管理证书用的。

    <o:p> </o:p>

    二、用于进行打包用的ocx控件evS1300.ocx。

    三、用于查看ocx控件的工具ActvxDoc。

    [制作过程]

    一、环境设置

    1、下载makeCAB包,解压到本地目录(如E盘根目录),如查看到如图1所示的工具集,则表示已下载成功:

    <v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>

     

    (图1:makeCAB包的工具集)

           2、设置系统环境变量,右键单击“我的电脑”à选择“属性”à选择“高级”选项卡,打开如图2所示的系统属性面版块:

     

     

    (图2:系统属性版块)

           3、在系统属性版块里单击“环境变量(N)”按钮,打开图3:

     

     

    (图3:系统变量)

           4、选择“系统变量(S)”里的“新建(W)”按钮,打开“编辑系统变量”对话框,如图4所示,然后在“变量值(V)”里加入“;EmakeCAB”:

     

     

    (图4:编辑系统变量)

    <o:p></o:p>

    <o:p> </o:p>

    二、将用于打包的OCX控件放在E盘根目录下(本文档使用名为evS1300.ocx的控件来进行介绍),如图5所示,其中evS1300.ocx是本文档进行操作的控件对象,而mfc71.dll、msvcp71.dll、msvcr71.dll这三个文件通常是进行打包时一并打包的文件,但不是必须(推荐一起打包),其可在系统中的system32目录下找到,请自行准备。

     

     

    (图5;用于操作的OCX控件路径)

    <o:p> </o:p>

    三、ActiveX发布步骤

    1、单击“开始”à“动行(R)”à输入“cmd”à回车à进入到操作的控件所在的目录,如图6所示:

     

     

    (图6:进入E:evS1300目录)

    2、创建PVK文件(私人密匙文件),在命令行中输入“makecert -sk evS1300 evS1300.pvk -n CN=XXXXXXX公司”,然后回车,如图7所示:

     

    (图7:创建PVK文件)

           3、创建CER文件(公司证书),在命令行中输入“makecert -sk evS1300.pvk evS1300.cer”,然后回车,如图8所示,若出现“Successed”提示,则会在E:evS1300目录下生成evS1300.cer文件,如图9所示:

    <v:shape id="_x0000_i1037" style="WIDTH: 414.75pt; HEIGHT: 271.5pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:DOCUME~1HUANGZ~1LOCALS~1Tempmsohtml13clip_image015.png"></v:imagedata></v:shape>

    (图8:创建CER文件)

    <o:p> </o:p>

    <v:shape id="_x0000_i1038" style="WIDTH: 415.5pt; HEIGHT: 279pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:DOCUME~1HUANGZ~1LOCALS~1Tempmsohtml13clip_image017.png"></v:imagedata></v:shape>

    (图9:生成evS1300.cer)

    <o:p></o:p>

           4、创建SPC测试软件出版商证明书,在命令行中输入“cert2spc evS1300.cer evS1300.spc”,然后回车,如图10所示:

     

     

    (图10:创建SPC测试软件出版商证明书)

    <o:p></o:p>

           5、创建INF文件,用记录本编辑以下信息

    1. [version]   
    2. signature="$CHINA$"  
    3. AdvancedINF=1.0  
    4.   
    5. [Add.Code]   
    6. evS1300.ocx=evS1300.ocx   
    7. msvcr71.dll=msvcr71.dll   
    8. mfc71.dll=mfc71.dll   
    9. msvcp71.dll=msvcp71.dll   
    10.   
    11. [evS1300.ocx]   
    12. file=thiscab   
    13. clsid={0440906E-9BD6-4F3E-B65A-39E1B339D9DA}   
    14. FileVersion=1,0,0,0  
    15. RegisterServer=yes   
    16.   
    17. [msvcr71.dll]   
    18. file-win32-x86=thiscab   
    19. RegisterServer=no   
    20. DestDir=11  
    21. FileVersion=7,10,3052,4  
    22.   
    23. [mfc71.dll]   
    24. file-win32-x86=thiscab   
    25. RegisterServer=no   
    26. DestDir=11  
    27. FileVersion=7,10,3077,0  
    28.   
    29. [msvcp71.dll]   
    30. file-win32-x86=thiscab   
    31. RegisterServer=no   
    32. DestDir=11  
    33. FileVersion=7,10,3077,0  

         如图11所示,并保存为E:evS1300evS1300.inf,如图12所示

     

    <v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 415.5pt; HEIGHT: 328.5pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:DOCUME~1HUANGZ~1LOCALS~1Tempmsohtml11clip_image001.png"></v:imagedata></v:shape>

    (图11:evS1300.inf)

    <o:p> </o:p>

     

    (图12:保存evS1300.inf)

           在evS1300.inf的内容里,[version]和[Add.Code]项是必须的,[Add.Code]的键值项的多少取决于以下你所配制项的多少。[msvcr71.dll]、[mfc71.dll]、[msvcp71.dll]就是上面我所说不是必须的项,只要你想把msvcr71.dll、mfc71.dll、msvcp71.dll包括在发布包里,那这么三项就必须写在inf里,而这三项的具体内容是固定的,可复制过去即可。最为关键的就是[evS1300.ocx]项,其中有clsid和FileVersion就是evS1300.ocx的classId和version,这要求必须一至,否我们发布出去的CAB包时不能在客户端自动更新下载安装。说到这里,那我们如何才能知道evS1300.ocx里面的classId和version呢?我在上面的必备条件里介绍到有一个用于查看ocx控件的工具ActvxDoc,对,就是用它,我们双击这个文件运行它,此时可以看到图13所示的界面:<o:p></o:p>

     

     

    (图13:ActiveX Documenter)

    在图13的界面里,点击“File”à“Open…”,打开您所要查看的OCX控件,如图14所示:

     

     

    (图14:打开控件)

    打开了控件之后,我们在界面的右边部位“Class”的下拉框里选择“<all interfaces=""></all>”就可以看到我们想要查找的FileVersion和classId,如图15所示:

     

     

    (图15:控件属性)

           6、创建CAB文件,在命令行中输入“cabarc -s 6144 n evS1300.cab msvcr71.dll mfc71.dll msvcp71.dll evS1300.ocx evS1300.inf”,然后回车,如图16所示:

    <o:p> </o:p>

    <o:p> </o:p>

     

     

    (图16:创建CAB文件)

           7、使用Code Signing Wizard签署一个CAB文件,首先双击运行工具集里面的signcode.exe(或在命令行里直接输入“signcode”后回车),系统会弹出如图17所示的数字签名向导:

     

     

    (图17:数字签名向导)

     

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

    <v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1027" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:DOCUME~1HUANGZ~1LOCALS~1Tempmsohtml11clip_image001.png"></v:imagedata></v:shape>

    (图18:选择CAB包)

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 黑色星期五
    Java实现 蓝桥杯VIP 算法训练 比赛安排
    Java实现 蓝桥杯VIP 算法训练 比赛安排
    Java实现 蓝桥杯VIP 算法训练 斜率计算
    Java实现 蓝桥杯VIP 算法训练 斜率计算
    Java实现 蓝桥杯VIP 算法训练 整数平均值
    Java实现 蓝桥杯VIP 算法训练 整数平均值
    控件动态产生器(使用RegisterClasses提前进行注册)
    Delphi编写自定义控件以及接口的使用(做了一个TpgDbEdit)
    Log4delphi使用心得
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/3434261.html
Copyright © 2011-2022 走看看