最近我们正在研究ActiveX技术。我们使用Delphi 5创建了一个具有ActiveForm的ActiveX控件应用程序。这个控件产生一个.OCX文件。现在,我们需要把这个控件部署在服务器端,在用户浏览网页并选择安装这个控件的时候,用户的IE才会下载、安装并显示这个控件。
但是我们的控件必须作数字签名以后,IE才会下载安装。问题是如何给ActiveX控件作数字签名呢?通过在网上询问朋友、查阅资料,再加上我们自己的研究,我们终于可以完成以上工作了。现将具体步骤与大家分享。
首先我们需要一套做数字签名的工具。如果你没有,可以到以下地址下载:
http://www.cnblogs.com/Files/babyt/SignTool.rar
我们的控件的名字是GMTestX.ocx。首先,我们需要创建一个.CAB文件用来把所有需要发布的文件压缩在一起。我们需要一起发布的文件是GMTestX.lic文件。它是Delphi在我们创建控件工程的时候为我们生成的。如果不发布这个文件,你的控件即使下载安装成功,IE也无法显示它。为了在一个.CAB文件中发布多个文件,我们必须先创建一个.INF文件。一个.INF文件可以告诉IE,它需要下载的文件和在哪里可以得到这些文件。
1. 创建.INF文件
创建一个.INF文件很简单,用记事本程序编写就可以了。我们把我们的.INF文件取名为GMTestX.inf。因为我们要在.CAB文件中放入GMTest.ocx和GMTest.lic这两个文件,所以我们的.INF文件的内容如下:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[version]
signature='$CHICAGO$'
AdvancedINF=2.0
[Add.Code]
GMTestX.ocx=GMTestX.ocx
GMTestX.lic=GMTestX.lic
[GMTestX.ocx]
file-win32-x86=thiscab
clsid={C5 04DF79-C5EC-4314-AC3E-1F770DB81A01}
FileVersion=1,0,0,0
RegisterServer=yes
[GMTestX.lic]
file-win32-x86=thiscab
FileVersion=1,0,0,0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在这个.INF文件的[version]部分有两句代码。signature='$CHICAGO$'表示这个.INF文件和Windows95或其后版本和Windows NT 4.0或其后的版本兼容。AdvancedINF=2.0表示Advpack.dll的版本,IE 4.0或其后版本必须导入这个文件去解析这个.INF文件。在这里要求的版本是2.0。
至于[Add.Code]部分,其中列出了在一个.CAB文件中需要下载的文件,并把这些文件的详细信息映射到其后对应的各个部分。比如[GMTestX.ocx]部分中的信息就是下载GMTestX.ocx这个文件的相关信息。
在[GMTestX.ocx]部分的第一句代码告诉IE,GMTestX.ocx文件就包含在这个.CAB文件中。第二行注明了这个控件的CLSID号。第三行是控件的版本号。第四行告诉IE需要使用前面的CLSID号来注册这个控件。[GMTestX.lic]部分就不多讲了。
2. 创建.CAB文件
在命令行中输入以下代码把GMTestX.ocx、GMTestX.inf和GMTestX.lic这三个文件添加到一个.CAB文件中,这个文件取名为GMTestX.cab:
cabarc.exe -s 6144 N GMTestX.cab GMTestX.ocx GMTestX.inf GMTestX.lic
3. 创建证书文件
在命令行输入以下命令:
makecert -sv GMTestX.pvk -r -n 'CN=GuangMingBros, OU=Certification, O=balabalabala, E=guangming@balabalabala.com' GMTestX.cer
4. 转换证书:
cert2spc GMTestX.cer GMTestX.spc
5. 创建另外一个自签名证书,叫test.cer
在命令行中依次输入以下两条命令:
makecert -sv test.pvk -r -n 'CN=GuangMingBros' test.cer
cert2spc test.cer test.spc
6. 从test.cer创建test.ctl文件
makectl test.cer test.ctl
7. 用GMTestX.pvk和GMTestX.spc这两个文件给test.ctl作数字签名
signcode -v GMTestX.pvk -spc GMTestX.spc test.ctl
8. 把test.ctl移动到受信系统存储区
certmgr -add -ctl test.ctl -s trust
9. 把GMTestX.cer移动到根系统存储区
certmgr -add -c GMTestX.cer -s root
10. 用test.pvk和test.spc给GMTestX.cab作数字签名
singcode -v test.pvk -spc test.spc GMTestX.cab
11. 检查文件是否通过验证
chktrust GMTestX.cab
如果文件通过了数字签名检测,系统会询问是否安装这个文件,这时候一定要选择安装,整个签名过程才能完成。
执行以上步骤的过程中,有时候需要用户输入密码。用户可以任意选择一个密码,比如12345。
接下来,我们把一个调用Delphi的Web Deploy命令产生的文件GMTestX.htm复制到C:\Inetpub\wwwroot\OurHTML文件夹中,并修改其内容如下:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<HTML>
<H1> Delphi 5 ActiveX Test Page </H1><p>
You should see your Delphi 5 forms or controls embedded in the form below.
<HR>&lt;certer><P>
<OBJECT
classid='clsid:C504DF79-C5EC-4314-AC3E-1F770DB81A01'
codebase='http://localhost/OurCAB/GMTestX.cab#version=1,0,0,0'
width=864
height=598
align=center
hspace=0
vspace=0
>
</OBJECT>
</HTML>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
再将签名的GMTestX.cab文件移动到C:\Inetpub\wwwroot\OurCAB文件夹中。
好了,现在打开IE,在地址栏中输入:http://localhost/OurHTML/GMTestX.htm后,IE询问是否下载这个控件,我们选择是,就可以看到我们的ActiveX控件的窗体了。大功告成!
总算完成了。步骤挺繁琐,但是好像必须这么做。我们对这个过程中涉及的相关技术并不十分了解。察看MSDN文档可以找到很多资料,想全部搞清楚得费点劲。不管怎样,用这些步骤就可以达到目的。如果你发现有什么错误,或者有什么疑问,欢迎给我们留言。如果这篇文章对你有所帮助,我们的目的就达到了。谢谢。

http://blog.sina.cn/dpool/blog/s/blog_4c700c0b01000cya.html?type=-1

发布ActiveX控件的更多相关文章

  1. Delphi发布ActiveX控件 制作CAB包 数字签名相关

    文件: SignTool.rar 大小: 84KB 下载: 下载 最近我正在研究ActiveX技术.我使用Delphi 7创建了一个具有ActiveForm的ActiveX控件应用程序.这个控件产生一 ...

  2. 发布MFC ActiveX控件并实现自动更新

    一.        引言 上一篇我们讲了如何使用 VC 2005来开发 MFC ActiveX控件,我们开发 ActiveX控件最终目的是将 ActiveX控件发布出来并嵌入在 Web网页中,随着控件 ...

  3. {VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件

    在VS2010中使用C#开发基于WinForm的ActiveX控件 常见的一些ActiveX大部分是使用VB.Delphi.C++开发,使用C#开发ActiveX要解决下面三个问题: 使.NET组件可 ...

  4. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  5. C# 在 vs2010 上开发 ActiveX 控件 【千辛万苦啊~】

    由于B/S项目中需要使用到读卡器的功能,但是由于厂家只有提供一个 读卡的dll,那么怎样能在客户端使用读卡器呢,那么进过一番查找,最总决定使用ActiveX 控件来做.由于是第一次接触到 Active ...

  6. [转]C#开发ActiveX控件,.NET开发OCX控件案例

    引自:百度   http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么 ...

  7. C#实现ActiveX控件开发与部署

    现在,我们手里已经有了这个控件包:QRCode.cab,下面我们编写一个测试的网页 <html> <head> <title>无标题页</title> ...

  8. 使用C#开发ActiveX控件(新) 转 http://www.cnblogs.com/yilin/p/csharp-activex.html

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  9. ActiveX控件

    什么是ActiveX控件:一个进程内服务器,支持多种的COM接口.(可以理解为,一个COM接口是一个纯抽象基类,你实现了它,并且它支持自注册,就是一个ActiveX控件了)可以把ActiveX控件看做 ...

随机推荐

  1. Spring mvc redirect跳转路径问题

    SpringMVC重定向视图RedirectView小分析 前言 SpringMVC是目前主流的Web MVC框架之一. 本文所讲的部分内容跟SpringMVC的视图机制有关,SpringMVC的视图 ...

  2. Android 离线语音用法(讯飞语音)

    这次给大家带来的是项目的离线语音功能. 讯飞开放平台中的离线语音 首先创建开放平台的账号.这个不必多说 然后创建新应用 选择我的应用,例如以下图,注意下我打马赛克的地方,这个appId非常重要 点击进 ...

  3. php如何实现万年历的开发(每日一课真是非常有效率)

    php如何实现万年历的开发(每日一课真是非常有效率) 一.总结 一句话总结: 1.判断每月有多少天: 通过data函数来判断,$days=date('t',$firstday); 2.判断每月的第一天 ...

  4. erlang 符号相关基本语法

    http://blog.csdn.net/anghlq/article/details/6803332 ErLang语法约定: 大写字母开头的名字(比如Address),表示一个变量,包括参数.局部变 ...

  5. 【codeforces 779C】Dishonest Sellers

    [题目链接]:http://codeforces.com/contest/779/problem/C [题意] 有n个商品; 打折前买和打折后买的价格不一样; 且必须有至少k个商品在打折前买; 问你买 ...

  6. Swift语言实现代理传值

    需求:利用代理实现反响传值(下面样例採用点击第二个视图控制器中的button来改变第一个视图控制器中的Label的内容) 一.创建RootViewController import Foundatio ...

  7. N 个互异数的数组的平均逆序数

    N 个互异数的数组的平均逆序数为 N(N−1)/4 1. 简单证明 对于任意的数的表 L(5,8,9,6,4),以及其反序表 Lr(4,6,9,8,5),它们各自的逆序数分别为:6 ((5, 4), ...

  8. Android菜鸟的成长笔记(23)——获取网络和SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx()方法来获取电话网络的相关信息.这些信息包括设备编号.软件版本.网络运营商代号.网络运营商名 ...

  9. dom4j解析xml获取所有的子节点并放入map中

    dom4j递归解析所有子节点 //解析返回的xml字符串,生成document对象 Document document = DocumentHelper.parseText(resultXml); / ...

  10. android:layout_gravity和android:gravity属性的差别

    gravity的中文意思就是"重心",就是表示view横向和纵向的停靠位置 android:gravity:是对view控件本身来说的,是用来设置view本身的文本应该显示在vie ...