如何发布ActiveX 控件

摘要:
聪明的你一定会很快就想到,我们可以使用户在客户端自动下载安装该ActiveX控件,这样一来即可以实现我们所想要的功能,又不需要用户自己去部署设置环境,这岂不是一举两得。[必备条件]一、用于将ActiveX控件进行打包并加数据鉴名的工具集:makecert.exe制作cer格式的证书,即X.509证书,同时可以创建私钥和公钥。chktrust.exe检查签署证书后的ocx是否正确。

[背景]

做过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所示的工具集,则表示已下载成功:

如何发布ActiveX 控件第1张

(1makeCAB包的工具集)

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

如何发布ActiveX 控件第2张

(2:系统属性版块)

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

如何发布ActiveX 控件第3张

(3:系统变量)

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

如何发布ActiveX 控件第4张

(4:编辑系统变量)

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

到,请自行准备。

如何发布ActiveX 控件第5张

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

三、ActiveX发布步骤

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

如何发布ActiveX 控件第6张

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

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

如何发布ActiveX 控件第7张

(7:创建PVK文件)

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

如何发布ActiveX 控件第8张

(8:创建CER文件)

如何发布ActiveX 控件第9张

(9:生成evS1300.cer)

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

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

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

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

(11evS1300.inf)

如何发布ActiveX 控件第10张

(12:保存evS1300.inf)

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

如何发布ActiveX 控件第11张

(13ActiveX Documenter)

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

如何发布ActiveX 控件第12张

(14:打开控件)

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

如何发布ActiveX 控件第13张

(图15:控件属性)

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

如何发布ActiveX 控件第14张

(图16:创建CAB文件)

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

如何发布ActiveX 控件第15张

(图17:数字签名向导)

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

如何发布ActiveX 控件第16张

(18:选择CAB)

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

如何发布ActiveX 控件第17张

(图19:选择签名类型)

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

如何发布ActiveX 控件第18张

(图20:选择CER证书)

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

如何发布ActiveX 控件第19张

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

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

如何发布ActiveX 控件第20张

(图22:选择散列算法)

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

如何发布ActiveX 控件第21张

(图23:选择其它证书)

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

如何发布ActiveX 控件第22张

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

如何发布ActiveX 控件第23张

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

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

如何发布ActiveX 控件第24张

(图26,完成操作总览)

如何发布ActiveX 控件第25张

(图27:签名成功提示)

免责声明:文章转载自《如何发布ActiveX 控件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇蓝牙专题(2)——初识BLE协议栈(物理层PHY)visual studio code运行时报错,Cannot find module 'webpack'下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Delphi安装/卸载OCX控件的方法

delphi 安装卸载ocx 请参见 如下 http://blog.csdn.net/xt_chaoji/article/details/7027298 打开Delphi,关闭所有项目。 1.安装OCX控件 点击菜单项:Component -> Import ActiveX Control… 进入如下界面: 然后点击按钮“Add..”,弹出如下界面...

关于Active控件的电子签名

两种方案:一是自己制作证书,客户端安装证书后就可以识别该控件;二就是买官方的喽,在国内找verisign的代理,负责各种电子签名,任何一台浏览器都可以识别该证书。该公司官方网址:http://www.verisign.com/products-services/security-services/code-signing/digital-ids-code-s...

Html页中使用OCX控件

原文:http://blog.csdn.net/mouse8166/article/details/5515657 最近准备开发一个b/s架构的应用程序需要用到activeX控件,web服务器尚未进入编码阶段,偶手上已有原用于vc客户端程序中的ocx控件,想测试一下此控件在普通网页上执行功能有无偏差,于是搞了个简单的html静态页面调用来测试OCX控件。...

VS2008 在IE中 调试 ActiveX控件 .

不知道是不是微软的粗心大意,VS2008中竟然没有ActiveX控件测试容器。 幸好需要在IE中测试控件,就不需要那个测试容器啦。 1. 生产测试控件的HTML: <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY> <OBJECT WIDTH...

ActiveX控件打包cab时INF文件的编写[转]

虽然微软对ActiveX越来越不信任,但是这个技术还是很多人喜欢用的,这个博客的编辑器貌似就用到了ActiveX。 在我们编写好ocx控件后只有在打包成CAB文件加入数字签名后才能正常发布,如果你用的是vc6,那么问题简单了,打包完成后不用考虑控件的运行库问题,现在的XP系统和将要淘汰的2kpro都已经有了这样的运行库。但是如果使用的是.net2005就会...

Asp.net中使用ActiveX控件

在asp.net项目项目中,使用了一个第三方的没有签名的ActiveX控件,代码如下: <SCRIPT LANGUAGE="JavaScript"> function Print(){printClass.PrintBar("0405-0300-0056<@>大客车(柯斯达)<@>车辆<@>2010年7月21...