zoukankan      html  css  js  c++  java
  • 发布ActiveX控件

    最近我们正在研究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:InetpubwwwrootOurHTML文件夹中,并修改其内容如下:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    <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:InetpubwwwrootOurCAB文件夹中。
    好了,现在打开IE,在地址栏中输入:http://localhost/OurHTML/GMTestX.htm后,IE询问是否下载这个控件,我们选择是,就可以看到我们的ActiveX控件的窗体了。大功告成!
    总算完成了。步骤挺繁琐,但是好像必须这么做。我们对这个过程中涉及的相关技术并不十分了解。察看MSDN文档可以找到很多资料,想全部搞清楚得费点劲。不管怎样,用这些步骤就可以达到目的。如果你发现有什么错误,或者有什么疑问,欢迎给我们留言。如果这篇文章对你有所帮助,我们的目的就达到了。谢谢。

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

  • 相关阅读:
    ES6 新特性
    基于.NET平台常用的框架整理
    你可能不知道的一些JavaScript 奇技淫巧
    js中apply方法的使用
    数据库中字段类型对应C#中的数据类型
    C# Socket SSL通讯笔记
    Media Types
    JS使用模板快速填充HTML控件数据 --- 自己写组件(0)
    FastDFS的配置、部署与API使用解读(8)FastDFS多种文件上传接口详解
    FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块
  • 原文地址:https://www.cnblogs.com/findumars/p/6891315.html
Copyright © 2011-2022 走看看