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

From: http://www.iteye.com/topic/110834


  • makeCAB.rar (188.5 KB)


 [背景]

       做过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)”里加入“;E\makeCAB”:

(图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~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\03\clip_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~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\03\clip_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:\evS1300\evS1300.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~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_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~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png"></v:imagedata></v:shape>


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

<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~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png"></v:imagedata></v:shape>

(图19:选择签名类型)

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

<o:p> </o:p>

<v:shape id="_x0000_i1028" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image003.png"></v:imagedata></v:shape>

(图20:选择CER证书)

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

<v:shape id="_x0000_i1029" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"></v:shape>

(图21:选择私钥的位置)

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

<v:shape id="_x0000_i1030" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image007.png"></v:imagedata></v:shape>

(图22:选择散列算法)

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

<v:shape id="_x0000_i1031" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image009.png"></v:imagedata></v:shape>

(图23:选择其它证书)

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

<v:shape id="_x0000_i1032" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image011.png"></v:imagedata></v:shape>

(图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

<o:p> </o:p>

<v:shape id="_x0000_i1033" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image013.png"></v:imagedata></v:shape>

(图25:给数据盖时间戳)

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

<v:shape id="_x0000_i1025" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"></v:shape>

(图26,完成操作总览)

<o:p> </o:p>

<v:shape id="_x0000_i1026" style="WIDTH: 164.25pt; HEIGHT: 90.75pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image017.png"></v:imagedata></v:shape>

(图27:签名成功提示)



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的博客我做主

今天刚刚注册了我的博客&#xff0c;本人将在这里叙写关于编程的方方面面新的知识点。首先声明&#xff0c;本人的编程还是个刚刚入门&#xff0c;所以现在只是向老前辈们学习&#xff0c;如果有比较经典的知识点&#xff0c;我会把把学到的新的知识点留在自己的博客上&#xf…

CSS之创建等高列布局之一

高度相等列在Web页面设计中永远是一个网页设计师的需求。如果所有列都有相同的背景色&#xff0c;高度相等还是不相等都无关紧要&#xff0c;因为你只要在这些列的父元素中设置一个背景色就可以了。但是&#xff0c;如果一个或多个列需要单独设置自己的背景色&#xff0c;那么它…

转这10句话

第一句 如果我们之间有1000步的距离  你只要跨出第1步 我就会朝你的方向走其余的999步 第二句 通常愿意留下来跟你争吵的人  才是真正爱你的人 第三句 付出真心 才会得到真心  却也可能伤得彻底 保持距离 就能保护自己  却也注定永远寂寞 第四句 有时候 不…

一篇介绍VC开发OCX的文章,写得太棒了!!!

From: http://www.cnblogs.com/gengaixue/archive/2010/08/13/1799112.html VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语&#xff1a;最近在弄ocx控件发布到asp.net网站上使用&#xff0c;就是用户在使用过程中&#xff0c;自动下载安装ocx控件。&…

Taro+react开发(37)箭头函数括号加个return

{getLearnList.map((item, index) > (<View><View key{index} className"img-title"><Text>xueyuan</Text><Image mode"widthFix" src{item.imgCoverPath} /></View></View>))}

使用webpack打包后的vue项目如何运行(express)

我们知道使用webpack打包vue项目后会生成一个dist文件夹&#xff0c;dist文件夹下有html文件和其他css、js以及图片等&#xff0c;那么打包后的文件该如何正确运行呢&#xff1f; 倘若直接打开html文件&#xff0c;会报如下错误&#xff1a; 那么该如何运行呢&#xff1f;其实…

数据链路层与交换机

1. 数据链路层的功能是什么&#xff1f;负责网络中相邻节点之间可靠的数据传输&#xff0c;并进行有效的流量和差错控制。具体地讲&#xff0c;以一次数据发送为例&#xff0c;数据链路层的作用包括数据链路的建立、维护与拆除、帧包装、帧传输、帧同步、帧的差错控制以及流量控…

编译vo-aacenc遇到的问题

sourceforge更新了vo-aacenc到0.1.3&#xff0c;就把自己的编码器也更新到最新。编译过程中无聊多测试了一下 发现一个小问题http://sourceforge.net/projects/opencore-amr/files/vo-aacenc/下载后解压 1 [gonglinux vo-aacenc-0.1.3]$ pwd 2 /home/gong/ff4android/vo-aacenc…

CSS之创建等高列布局之二

3. 给容器div使用单独的背景色&#xff08;流体布局&#xff09; 这种布局可以说是就是第二种布局方法&#xff0c;只是这里是一种多列的流体等高列的布局方法。前面也说过了&#xff0c;其实现原理就是给每一列添加相对应用的容器&#xff0c;并进行相互嵌套&#xff0c;并在…

Oracle中Number(p,s)的意义

From: http://www.chinabyte.com/biz/cbfwq/394/2650894.shtml number(p,s) p:1~38 s:-84~127 p>0&#xff0c;对s分2种情况分析&#xff1a; 1. s>0 精确到小数点右边s位&#xff0c;并四舍五入。然后检验有效数位是否<p&#xff1b;如果s>p&#xff0c;小数点…

Taro+react开发(38)注意请求接口的/

//获取课程课期 export const getLastOfflineLessonByCourseCode data > {return request.get(${vdp}/offlineLesson/getLastOfflineLessonByCourseCode,data); };

git 上传代码步骤

接下来 第一步&#xff1a;建立git仓库 cd到你的本地项目根目录下&#xff0c;执行git命令&#xff0c;此命令会在当前目录下创建一个.git文件夹。 git init 第二步&#xff1a;将项目的所有文件添加到仓库中 git add . 这个命令会把当前路径下的所有文件&#xff0c;添加…

CSS之创建等高列布局之三

4. 使用正padding和负margin对冲实现多列布局方法 这种方法很简单&#xff0c;就是在所有列中使用正的上、下padding和负的上、下margin&#xff0c;并在所有列外面加上一个容器&#xff0c;并设置overflow:hiden把溢出背景切掉。下面一起来看代码 HTML: CSS: 这里代码的关键…

一个 人 的 态度 决定 他 成功 的 高度

一个 人 的 态度 决定 他 成功 的 高度转载于:https://blog.51cto.com/sunwei/122390

var arr = [] 与 var arr = new Array();

new关键字的使用除了在需要实例化一个对象&#xff0c;或罕见的需要延时加载数据的情况外&#xff0c;你基本上不需要使用new关键字。在Javascript里分配大量的new变量地址是一项很慢的操作&#xff0c;为了效率起见&#xff0c;你应该始终使用对象符号。 new Array() 会实例化…

将windows下编辑好的文件(GBK)转换成Linux下的格式(UTF8)

背景&#xff1a;一般我们在windows上编辑好的文件默认编码是GBK&#xff0c;而且换行符是^M&#xff0c;为了将这些文件用在linux上&#xff0c;我们一般会将它们转换成Linux下的文件格式&#xff0c;即去掉^M&#xff0c;且将文件格式转换成UTF8。 这时&#xff0c;就会用到两…

git报错:‘fatal:remote origin already exists‘怎么处理?附上git常用操作以及说明。

git添加远程库的时候有可能出现如下的错误&#xff0c; 怎么解决&#xff1f; 只要两步&#xff1a; 1、先删除 $ git remote rm origin2、再次执行添加就可以了。   ----------------------------------------------git常用操作---------------------------------------…

CSS之两栏固定布局(一)

1. 固定布局之两栏布局——边栏在左边&#xff0c;主内容在右边 实现的布局效果&#xff1a;整个布局居中显示&#xff0c;而且侧栏显示在左边&#xff0c;主内容在右边 HTML&#xff1a; - div.wrapper是主容器&#xff0c;以960px为例&#xff0c;并且居中显示 - div.heade…