如何发布ActiveX 控件
转自:http://blog.csdn.net/zougangx/archive/2008/07/30/2738147.aspx
[背景]
做过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所示的工具集,则表示已下载成功:
(图1:makeCAB包的工具集)
2、设置系统环境变量,右键单击“我的电脑”à选择“属性”à选择“高级”选项卡,打开如图2所示的系统属性面版块:
(图2:系统属性版块)
3、在系统属性版块里单击“环境变量(N)”按钮,打开图3:
(图3:系统变量)
4、选择“系统变量(S)”里的“新建(W)”按钮,打开“编辑系统变量”对话框,如图4所示,然后在“变量值(V)”里加入“;E/makeCAB”:
(图4:编辑系统变量)
二、将用于打包的OCX控件放在E盘根目录下(本文档使用名为evS1300.ocx的控件来进行介绍),如图5所示,其中evS1300.ocx是本文档进行操作的控件对象,而mfc71.dll、msvcp71.dll、msvcr71.dll这三个文件通常是进行打包时一并打包的文件,但不是必须(推荐一起打包),其可在系统中的system32目录下找
到,请自行准备。
(图5;用于操作的OCX控件路径)
三、ActiveX发布步骤
1、单击“开始”à“动行(R)”à输入“cmd”à回车à进入到操作的控件所在的目录,如图6所示:
(图6:进入E:/evS1300目录)
2、创建PVK文件(私人密匙文件),在命令行中输入“makecert -sk evS1300 evS1300.pvk -n CN=XXXXXXX公司”,然后回车,如图7所示:
(图7:创建PVK文件)
3、创建CER文件(公司证书),在命令行中输入“makecert -sk evS1300.pvk evS1300.cer”,然后回车,如图8所示,若出现“Successed”提示,则会在E:/evS1300目录下生成evS1300.cer文件,如图9所示:
(图8:创建CER文件)
(图9:生成evS1300.cer)
4、创建SPC测试软件出版商证明书,在命令行中输入“cert2spc evS1300.cer evS1300.spc”,然后回车,如图10所示:
(图10:创建SPC测试软件出版商证明书)
5、创建INF文件,用记录本编辑以下信息
[version]
signature="$CHINA$"
AdvancedINF=1.0
[Add.Code]
evS1300.ocx=evS1300.ocx
msvcr71.dll=msvcr71.dll
mfc71.dll=mfc71.dll
msvcp71.dll=msvcp71.dll
[evS1300.ocx]
file=thiscab
clsid={0440906E-9BD6-4F3E-B65A-39E1B339D9DA}
FileVersion=1,0,0,0
RegisterServer=yes
[msvcr71.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=7,10,3052,4
[mfc71.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=7,10,3077,0
[msvcp71.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=7,10,3077,0
如图11所示,并保存为E:/evS1300/evS1300.inf,如图12所示
(图11:evS1300.inf)
(图12:保存evS1300.inf)
在evS1300.inf的内容里,[version]和[Add.Code]项是必须的,[Add.Code]的键值项的多少取决于以下你所配制项的多少。[msvcr71.dll]、[mfc71.dll]、[msvcp71.dll]就是上面我所说不是必须的项,只要你想把msvcr71.dll、mfc71.dll、msvcp71.dll包括在发布包里,那这么三项就必须写在inf里,而这三项的具体内容是固定的,可复制过去即可。最为关键的就是[evS1300.ocx]项,其中有clsid和FileVersion就是evS1300.ocx的classId和version,这要求必须一至,否我们发布出去的CAB包时不能在客户端自动更新下载安装。说到这里,那我们如何才能知道evS1300.ocx里面的classId和version呢?我在上面的必备条件里介绍到有一个用于查看ocx控件的工具ActvxDoc,对,就是用它,我们双击这个文件运行它,此时可以看到图13所示的界面:
(图13:ActiveX Documenter)
在图13的界面里,点击“File”à“Open…”,打开您所要查看的OCX控件,如图14所示:
(图14:打开控件)
打开了控件之后,我们在界面的右边部位“Class”的下拉框里选择“<all interfaces=""></all>”就可以看到我们想要查找的FileVersion和classId,如图15所示:
(图15:控件属性)
6、创建CAB文件,在命令行中输入“cabarc -s 6144 n evS1300.cab msvcr71.dll mfc71.dll msvcp71.dll evS1300.ocx evS1300.inf”,然后回车,如图16所示:
(图16:创建CAB文件)
7、使用Code Signing Wizard签署一个CAB文件,首先双击运行工具集里面的signcode.exe(或在命令行里直接输入“signcode”后回车),系统会弹出如图17所示的数字签名向导:
(图17:数字签名向导)
8、单击“下一步(N)”按钮,来到图18所示,选择要进行数字签名的且已做成CAB包的文件evS1300.cab文件。
(图18:选择CAB包)
•makeCAB.rar (188.5 KB)
9、选择好CAB包后单击“下一步(N)”按钮,在选择想要的签名类型里选择“自定议(C)”并单击“下一步(N)”按钮,如图19所示:
(图19:选择签名类型)
10、接下来单击“从文件选择(F)”按钮,选择刚刚制作的evS1300.cer,如图20所示:
(图20:选择CER证书)
11、在图20中单击“下一步(N)”按钮来到图21,然后在图21里选择“CSP中的私钥(K)”。
(图21:选择私钥的位置)
12、在图21中单击“下一步(N)”按钮,然后在图22中的散列算法中选择“shal”,并单击“下一步(N)”按钮。
(图22:选择散列算法)
13、在“证书路径中的证书”中选择“证书路径中的所有证书,包括根证书(C)”,在“其它证书(可选)”中选择“包括在以下PKCS #7 证书(.p7b)文件中的证书(P):”,并单击“浏览(R)…”按钮选择evS1300.spc文件,选择完后单击“下一步(N)”按钮,如图23所示:
(图23:选择其它证书)
14、接下来在弹出的“数据描述”窗口中输入公司的名称和网址并单击“下一步(N)”按钮,如图24所示:
(图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
(图25:给数据盖时间戳)
16、完成,在图25中单击“下一步(N)”按钮便可来到数字签名向导的最后一步,即操作总览,如图26所示,单击“完成”按钮便可大功告成,如图27所示:
(图26,完成操作总览)
(图27:签名成功提示)
相关文章:

200行代码实现一个滑动验证码
作者 | 崔庆才 转载自进击的Coder(ID: FightingCoder)做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动、点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大致说…

Envoy源码分析之Dispatcher
2019独角兽企业重金招聘Python工程师标准>>> 摘要: Dispatcher 在Envoy的代码中Dispatcher是随处可见的,可以说在Envoy中有着举足轻重的地位,一个Dispatcher就是一个EventLoop,其承担了任务队列、网络事件处理、定时器…

Windows 8 快捷键大全
为什么80%的码农都做不了架构师?>>> win8快捷键大全: Windows 键 X :Windows快捷菜单 Windows 键 C :显示个性分类和时钟 Windows 键 I :打开“设置”个性分类 Windows 键 K :打开“设备”…

Activex、OLE、COM、OCX、DLL之间区别、联系
转自:http://baike.baidu.com/view/393671.htm 概述 .ocx是ocx控件的扩展名,与.exe .dll同属于PE文件。下面说说什么是ocx控件! OCX 是对象类别扩充组件。 如果你用过Visual Basic或者Delphi一类的可视化编程工具,那么对控件这个概念一定不会陌生&#…

不写一行代码,也能玩转Kaggle竞赛?
整理 | Jane 出品 | AI科技大本营(ID:rgznai100)【导读】AI科技大本营会给大家分享一些 Kaggle 上的资源,如 Kaggle 开放的数据集,也会分享一些好的竞赛方案或有意义的竞赛经验,帮助大家成长。今天…

认识flask框架-2
1.json:基于键值对的字符串,轻量级的数据交互格式,用来传输数据 2.json模块 dumps:把字典转化成json字符串。 loads:把json字符串转成字典。 dump、load操作的是文件对象。 jsonify可以返回json字符串,会修改响应的类型为applicat…

Sencha-概念-Layouts(布局)(官网文档翻译8)
Sencha-概念-Layouts(布局)(官网文档翻译8) 介绍和HBox 布局描述了在您的应用程序的组件的大小和位置。例如,一个电子邮件客户端可能具有固定到左边的消息的列表,以说,可用的宽度的三分之一,和一个消息观看…

Photoshop图像处理操作汇总
1、给图像添加外边框,保持图像原有大小: 点击图层-->新建-->图层,弹出新图层对话框,点击确定,点按"Ctrl A”键将图像全部选中,再点击编辑>描边,弹出描边对话框,在宽…

人工智能进军餐饮:AI调酒,越喝越有
作者 | 神经小姐姐来源 | 转载自HyperAI超神经(ID:HyperAI)导读:“吃”,现在已经成了一种文化,对食物的不懈追求,可以说是人类历史的一种推动力。从烹饪的进化,到现在花样百出的美食,…

LaTeX - 带圈数字
2019独角兽企业重金招聘Python工程师标准>>> 法I. by zepinglee \documentclass[UTF8]{ctexart} \XeTeXcharclass①1 \XeTeXcharclass②1 \XeTeXcharclass③1 \XeTeXcharclass④1 \XeTeXcharclass⑤1 \XeTeXcharclass⑥1 \XeTeXcharclass⑦1 \XeTeXcharclass⑧1 \Xe…

akcms折腾记
这几天闲着无聊,找cms折腾一下,先是搞了大名鼎鼎的dedecms,不过那繁琐真不是盖的,想修改个模板不知从哪里动手。虽然现在工作的后台也是由dedecms改过来的,但平时也就发发文章而已。 然后就找到了这个神器:…

VC++ OCX 控件注册
转自:http://www.cctry.com/thread-5334-1-1.html 方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例: regsvr32 netshare.ocx //注册netshare.ocx控件 regsvr32 /u netshare.ocx //解除netshare.ocx控件…

程序猿生存指南-4 借钱风波
借钱风波(10)临近春节,我的朋友圈被各个公司的年终奖刷屏。土豪互联网公司有送现金的,有送豪车的,还有送别墅的。它们享受着移动互联网的红利,赚得盆满钵满。不过翻看公司请媒体写的那些报道,就…

赛灵思:人工智能芯片发展方向与误区
演讲嘉宾 | 姚颂,赛灵思人工智能业务资深总监整理 | 夕颜人工智能发展过程中,算力是一个重要的因素,算力就像是 AI 的燃油,没有燃油,AI 哪也去不了。而为 AI 应用提供算力的,正是各种各样的芯片。而近几年&…

Python 多线程抓取网页 牛人 use raw socket implement http request great
Python 多线程抓取网页 - 糖拌咸鱼 - 博客园Python 多线程抓取网页最近,一直在做网络爬虫相关的东西。 看了一下开源C写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术的实现。1、larbin的URL去重用的很高效的bloom filter算法; 2、DN…

从特斯拉到英伟达,那些端到端自动驾驶研发系统有何不同?
作者 | 黄浴,奇点首席科学家兼总裁来源 | 转载自知乎专栏自动驾驶与视觉感知导读:近日,吴恩达的 Drive.ai 被苹果收购的消息给了自动驾驶领域一记警钟,但这个领域的进展和成果犹在。本文将介绍一些端到端的自动驾驶研发系统&#…

vc6中进行多行注释和反注释的方法
1、利用工具中自带的按钮实现: Tools-->Customize-->Add-ins and Macro Files-->将SAMPLE项选中-->Commands-->Category中选择Macros-->在Commands中将CommentOut拖到工具栏,再选中一个Images,点击OK即可。 这种方法是使…

一看就懂!【英雄联盟锐雯】与 Python 详解设计模式之门面模式
【网络配图】设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模…

无法挂载 NTFS格式的分区:mount: unknown filesystem type ‘ntfs’
问题: # mount –t ntfs /dev/sdb1 /mnt/usb mount: unknown filesystem type ‘ntfs’ 这是由于CentOS release 5.3(Final)上无法识别NTFS格式的分区。解决办法: 通过使用 ntfs-3g 来解决。 打开ntfs-3g的下载点http://w…

vs2008 ActiveX控件测试容器的生成以及调试ActiveX控件
1、ActiveX控件测试容器的生成:用TSTCON生成测试容器 http://msdn.microsoft.com/zh-cn/library/f9adb5t5(vvs.90).aspx 在搜索里搜索tstcon,双击TstCon文件夹,将此文件夹里的东西全部复制到另外一个新的空文件里,然后打开解决方案 tstcon.…

百度自动驾驶新突破:获首批T4牌照,升级Apollo 5.0,将进行复杂城市场景路测...
作者 | KYLE WIGGERS等编译 | 夕颜出品 | AI科技大本营(ID:rgznai100)最近,百度自动驾驶项目终于有了进展。先是上周悄然发布了 Apollo 的最新版本 Apollo 5.0,引入一些新功能;昨天下午,北京市自动驾驶测试…
折叠屏就要来了,适配逼死 Android 开发?
1. 异型屏还没适配好,折叠屏就要来了,Android 的碎片化,让开发者又多掉了不少头发。 北京时间 11 月 8 日,三星在旧金山向开发者发布了一款可折叠屏幕手机。并表示,新技术需要开发者调整其 App,以确保在手机…

nginx虚拟目录配置
2019独角兽企业重金招聘Python工程师标准>>> 今天搞了N久的虚拟目录配置,在几乎要放弃的时侯偶然看到一篇文章,将我的问题搞定 原贴地址:http://blog.sina.com.cn/s/blog_6c2e6f1f0100l92h.html 我的需求是这样的,系…

阿里达摩院刷新纪录,开放域问答成绩比肩人类水平,超微软、Facebook
出品 | AI科技大本营(ID:rgznai100)近日,由阿里巴巴达摩院语言技术实验室研发的 Multi-Doc Enriched BERT 模型在微软的 MS MARCO 数 据评测任务,Passage Retrieval Task(文档检索排序)和 Q&A Task&…

解决windows7下vs2008不能正常编译ActiveX控件的问题
在windows7系统中,vs2008环境下用MFC ActiveX Control生成的控件不能正常编译,但是在xp系统中却能正常编译,解决方法: 1、在windows7中编译,提示错误为:fatal error LNK1000: Internal error during IncrB…

什么是shell【TLCL】
常用命令 datecaldf——report file system disk space usagefree——display amount of free and used memory in the systemexit——退出终端Ctrl-Alt-F1 到 Ctrl-Alt-F6 访问后台终端会话,AltF7返回图形桌面转载于:https://www.cnblogs.com/songdechiu/p/9943599…

Linux终端的几个常用快捷方式,记下!
一、初识linux的终端种类:本地、远程 查看本终端命令: #tty 命令,看到当前所处的终端 #(w)who 命令,看到系统中所有登录的用户 其中,tty 终端为表示在本地命令行模式下打开…

从0到1 | 文本挖掘的传统与深度学习算法
一、什么是文本挖掘?讨论文本挖掘之前,我们要先说一下数据挖掘的概念,因为文本挖掘是数据挖掘的一个分支。数据挖掘(Data Mining)指从大量的数据中通过算法搜索隐藏在其中信息的过程。而文本挖掘就是从文本数据中获取有…

window7系统中64位安装matalbR2009b后出现乱码的解决方案
转自:http://blog.csdn.net/shaoguangleo/archive/2010/11/29/6042194.aspx MATLAB 中默认的字体是 Monospaced (即等宽字体),这是一种非常适合用于显示程序源代码的字体。但Monospaced 是种逻辑字体,它在不同语言和操…

【电路】pmic芯片设计细节
VIO_IN供电https://e2e.ti.com/support/power-management/f/196/t/712146?tisearche2e-sitesearch&keymatchtps65916 Note that every GPIO will be configured as an input for the first 6ms after VCC is supplied, which is the time it takes for the device to init…