一个ActiveX control的创建过程

  1. 创建

    根据这篇文章的介绍:http://www.cnblogs.com/time-is-life/p/6354152.html 来创建,里面包含了创建的基本过程以及属性事件方法的使用。

  2. 使用:

    参考文章中建议使用ActiveX Control Pad,这个工具确实很好用,能够自动生成带有Active x控件的网页,而且可以直接设计和配置参数。但是这个工具只在老的32位系统可以使用,我试了Windows server 2008 32位系统,装不上,其他的64位系统也装不上。最后在一台XP的机器上装上了。

    如果不使用ActiveX Control Pad, 那就只能自己写HTML中的Object标签,类似下面的代码:

<OBJECT id="myactivex1" width=500 height=300 CLASSID="clsid:9373B934-C98F-418E-AA75-5D19469D70DC" CODEBASE="MyActiveX.ocx#version=1.0.0.1"></OBJECT>

 

这里的CLASSID取值不能取错。如下图所示,应该取的是IDL文件中COCLASS的UUID,而不是LIBRARY的UUID。我刚开始的时候弄错了,很久也没有找到原因,最后对比ActiveX Control Pad生成的代码才发现问题所在。

 

另外对于OBJECT标签中的 CODEBASE属性,这个属性所指的路径是供客户端IE下载OCX文件的所在,如果OCX和当前网页在同一个路径下,就不用指定路径,直接写OCX文件名和版本信息即可。如果不在同一个路径,甚至不在同一个网站,则需要带上OCX的完整网址。

对于客户端IE的设置,需要在安全设置中指定允许下载和运行此控件(如果该OCX控件已经签名了,一般不需要额外的配置,如果没有签名,则需要设置允许运行未签名的OCX控件。)。另外对于IE的安全性设置,有一个需要注意的问题,如果将该站点加入到了信任站点,那么只有对于信任站点的安全性设置才对该网站起作用,Internet和Intranet的设置不会对该站点起作用。

  1. 打包:

    Cabarc 的语法在这里:https://technet.microsoft.com/en-us/library/cc728406(v=ws.10).aspx

  2. 签名。

    为了使IE将该控件识别为安全的空间,需要进行签名,关于签名的描述如下:

To create a signed ActiveX control, you must purchase a Code Signing Certificate from one of the certificate providers such as Thawte, Verisign, or GeoTrust. With this service, they will verify your identity and provide you certificate files you use to sign the ActiveX application. I chose Thawte for a Code Signing Certificate, who provided two files for signing the application, mycert.spc and mykey.pvk.

To sign the ActiveX application, we package the components of the application into a CAB file, which is downloaded from the web site and the ActiveX control is installed on the system.cab包的创建过程见参考文章)

To sign the CAB file you created, you need the signcode.exe tool from Microsoft MSDN. Refer to the "Signing and Checking with Authenticode" reference at the end of this article. You use the signcode tool with the certificate files you obtained from purchasing a Coding Signing Certificate to sign the CAB file. The following is an example use of signcode to sign myactivex.cab:

signcode -n "myactivex" -i 

   http://www.myactivex.com -spc mycert.spc -v mykey.pvk -t 

   <A href="http://timestamp.verisign.com/scripts/timstamp.dll%20myactivex.cab" target=_blank>http://timestamp.verisign.com/scripts/timstamp.dll myactivex.cab</A>

In the above example, http://www.myactivex.com should be replaced with a web page that provides users further information about your signed ActiveX control.

 

  1. 升级。

    如果更改了ocx控件的代码,比如新增加了属性方法事件等,由于原有的用户已经通过codebase下载并且注册了ocx控件,即使在服务器上放了新的ocx控件,但是原有用户的浏览器并不会重新下载并且注册ocx控件。怎么办那?

    解决方法就是增加ocx文件的版本号,这样原有用户的浏览器发现ocx的版本增加了,就会自动下载并且更新ocx控件,这样新的代码更改就能应用到用户的机器上了。

    Ocx文件版本的修改流程如下:

    1. 资源文件中有Version一项,在里面修改版本,修改小版本即可。

      注意里面有好几处版本号,都需要修改。

    1. 重新编译项目,确认生成ocx的文件版本发现了变化。

    2. 修改inf文件中的版本号。

    3. 将inf和ocx文件拷贝到同一目录,然后用CABARC工具重新生成cab包。
    4. 将新的cab包拷贝到web服务器目录下,然后更改HTML代码中的CODEBASE中的CAB包版本号。

<OBJECT id="MyActiveX1" width=500 height=300 CLASSID="clsid:9373B934-C98F-418E-AA75-5D19469D70DC" CODEBASE="MyActiveX.cab#version=1,0,0,2">

尤其需要注意的是版本号是用逗号分隔的,而不是用点分隔的。

 

执行完上述步骤后,用户再次打开网页的时候,ocx控件会被重新下载和注册以升级到新版。如果执行的时候发现最新版的某些功能没有上去,重新打开一个 IE浏览器就可以了。

原文地址:https://www.cnblogs.com/time-is-life/p/6357415.html