一个ActiveX control的创建过程
- 创建
根据这篇文章的介绍:http://www.cnblogs.com/time-is-life/p/6354152.html 来创建,里面包含了创建的基本过程以及属性事件方法的使用。
- 使用:
参考文章中建议使用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的设置不会对该站点起作用。
- 打包:
Cabarc 的语法在这里:https://technet.microsoft.com/en-us/library/cc728406(v=ws.10).aspx
- 签名。
为了使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:
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. |
- 升级。
如果更改了ocx控件的代码,比如新增加了属性方法事件等,由于原有的用户已经通过codebase下载并且注册了ocx控件,即使在服务器上放了新的ocx控件,但是原有用户的浏览器并不会重新下载并且注册ocx控件。怎么办那?
解决方法就是增加ocx文件的版本号,这样原有用户的浏览器发现ocx的版本增加了,就会自动下载并且更新ocx控件,这样新的代码更改就能应用到用户的机器上了。
Ocx文件版本的修改流程如下:
- 资源文件中有Version一项,在里面修改版本,修改小版本即可。
注意里面有好几处版本号,都需要修改。
- 重新编译项目,确认生成ocx的文件版本发现了变化。
- 修改inf文件中的版本号。
- 将inf和ocx文件拷贝到同一目录,然后用CABARC工具重新生成cab包。
- 将新的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浏览器就可以了。
一个ActiveX control的创建过程的更多相关文章
- Android Context创建过程
特定的资源或者类构成了Android应用程序的运行上下文环境 PackageManager, ClassLoader, Assert等等 Android应用程序窗口的运行上下文环境是通过Con ...
- 深入理解Java对象的创建过程:类的初始化与实例化
摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类 ...
- (转)深入理解Java对象的创建过程
参考来源:http://blog.csdn.net/justloveyou_/article/details/72466416 摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一 ...
- [ActiveX]使用VS2010创建MFC ActiveX工程项目
ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能队列运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括web网页,应用程序窗体等等. ActiveX控 ...
- VB.NET或C#报错:You must hava a license to use this ActiveX control.
VB.NET或者C# winform开发时,如果使用了Microsoft Visual Basic 6.0 ActiveX,并动态创建该控件实例,那么程序移植到没有安装Visual Basic 6.0 ...
- 要使用C#实现一个ActiveX控件
要使用C#实现一个ActiveX控件,需要解决三个问题: 1.使.NET组件能够被COM调用 2.在客户机上注册后,ActiveX控件能通过IE的安全认证 3.未在客户机上注册时,安装包能通过IE的签 ...
- sql学习笔记(18)-----------数据库创建过程
手动创建数据库的步骤: 第一步:决定数据库实例的SID 数据库实例的SID用来将当前实例和以后可能创建的实例进行区分 % setenv ORACLE_SID mynewdb 第二步:建立数 ...
- JVM系列(三):JVM创建过程解析
上两篇中梳理了整个java启动过程中,jvm大致是如何运行的.即厘清了我们认为的jvm的启动过程.但那里面仅为一些大致的东西,比如参数解析,验证,dll加载等等.把最核心的loadJavaVM()交给 ...
- ASP.NET Web API 控制器创建过程(二)
ASP.NET Web API 控制器创建过程(二) 前言 本来这篇随笔应该是在上周就该写出来发布的,由于身体跟不上节奏感冒发烧有心无力,这种天气感冒发烧生不如死,也真正的体会到了什么叫病来如山倒,病 ...
随机推荐
- 用css解决table文字溢出控制td显示字数(转)
场景: 最左边这栏我不行让他换行,怎么办呢? 下面是解决办法: table{ width:100px; table-layout:fixed;/* 只有定义了表格的布局算法为fixed,下面td的定义 ...
- windows和linux 下将tomcat注册为服务
参考文献: tomcat注册成windows服务 背景 当前项目需要运行两个Tomcat,每次启动系统以后都要手动进入到tomcat目录执行startup.bat,非常烦,所以想将这两个tomcat直 ...
- SQL Server DATEDIFF() 函数(SQL计算时间差)
select * from task_list where 1=1 and datediff(dd,carateTime,getdate()) =0 定义和用法 DATED ...
- perl数组高级
1 去除一个数组中的重复元素: 使用grep函数代码片段: 代码: my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 ); my %count; ...
- Delphi处理Android的路径信息
路径操作就使用TPath的方法都很方便.usesSystem.IoUtilsTPath.GetTempPath//临时目录TPath.GetCameraPath//照相机目录(照片/录像)TPath. ...
- TStream实现多表查询
TStream实现多表查询 function TynFiredac.QuerySQLS(const ASQL, ASQL2: string; AStorageFormat: string = 'bin ...
- vs已停止工作
第一步: 开始-->所有程序-->Microsoft Visual Studio 2012-->VisualStudio Tools-->VS2012 开发人员命令提示(以管理 ...
- 【GitLab】【GitHub】GitLab和GitHub的双向同步
有这种需求,需要GitLab上的现有代码库,同步到GitHub上. 又有一种需求,需要将GitHub上的代码库,同步到gitlab上. 一.GitLab上的代码库,自动同步到GitHub上 大致需要三 ...
- 从Oracle迁移到MySQL的各种坑及自救方案
当企业内部使用的数据库种类繁杂时,或者有需求更换数据库种类时,都可能会做很多数据迁移的工作.有些迁移很简单,有些迁移可能就会很复杂,大家有没有考虑过为了顺利完成复杂的数据库迁移任务,都需要考虑并解决哪 ...
- Google SRE 读书笔记 扒一扒SRE用的那些工具
写在前面 最近花了一点时间阅读了<SRE Goolge运维解密>这本书,对于书的内容大家可以看看豆瓣上的介绍.总体而言,这本书是首次比较系统的披露Google内部SRE运作的一些指导思想. ...