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

    [背景] 
    做过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 是管理证书用的。 
    二、用于进行打包用的ocx控件evS1300.ocx。 
    三、用于查看ocx控件的工具ActvxDoc。 
    [制作过程] 
    一、环境设置 
    1、下载makeCAB包,解压到本地目录(如E盘根目录),如查看到如图1所示的工具集,则表示已下载成功: 

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

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

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

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

    三、ActiveX发布步骤

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

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

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

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

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

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

    在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所示的界面: 

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

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

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

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

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

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

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

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

    12、在图21中单击“下一步(N)”按钮,然后在图22中的散列算法中选择“shal”,并单击“下一步(N)”按钮。

    13、在“证书路径中的证书”中选择“证书路径中的所有证书,包括根证书(C)”,在“其它证书(可选)”中选择“包括在以下PKCS #7 证书(.p7b)文件中的证书(P):”,并单击“浏览(R)…”按钮选择evS1300.spc文件,选择完后单击“下一步(N)”按钮,如图23所示: 

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

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

    (这里我提拱三个免费的代码签名时间戳地址)

    VeriSign: http://timestamp.verisign.com/scripts/timstamp.dll

    Comodo: http://timestamp.comodoca.com/authenticode

    GeoTrust/TrustCenter: http://www.trustcenter.de/codesigning/timestamp

    16、完成,在图25中单击“下一步(N)”按钮便可来到数字签名向导的最后一步,即操作总览,如图26所示,单击“完成”按钮便可大功告成,如图27所示: 

  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/shangbolei/p/4950180.html
Copyright © 2011-2022 走看看