ActiveX控件打包成Cab实现浏览器自动下载安装
前言
我们在浏览器中使用我们自己的一些OCX,或者是DLL这一类的文件,在X86的机器上需要我们手动将这些文件拷贝到Windows/System32 文件夹下面去,然后通过Dos命令regsvr32 test.ocx注册之后才能够使用。
原来我们一直采用安装包的方式,就是客户端需要安装我们提供的一个exe安装包,这个exe安装包的目的就是将一堆如OCX,DLL之类的文件打包 , 并在客户端安装的时候将这些文件统统拷贝到Windows/System32文件夹下面去, 然后通过Dos命令regsvr32 test.ocx注册文件。但是我们使用这样的方式,会有一个缺陷,就是浏览器端必须要安装我们提供的exe安装包才能使用系统,否则就不能。
介绍
微软定义根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。
做过ActiveX控件的朋友都知道,使用ActiveX控件,浏览器端就可以自动下载ActiveX控件到Windows/System32,并进行注册。这样我们既不需要手动拷贝文件,又不需要去安装什么exe安装包,还能实现我们想要的功能,这岂不是一举两得。
准备工作
要实现ActiveX控件进行自动下载就需要将文件打包成Cab文件,然后浏览器去下载Cab文件,然后解压。
(1)我们需要准备以下文件:
用于将ActiveX控件进行打包并加数据鉴名的工具集,如图1:
makecert.exe 制作cer格式的证书,即X.509证书,同时可以创建私钥和公钥。
cert2spc.exe 将cer格式证书转换成spc格式证书,即PKCS #7证书。
cabarc.exe 将ocx打包成cab。
signcode.exe 将证书签署到ocx上去。
chktrust.exe 检查签署证书后的ocx是否正确。
certmgr.exe 是管理证书用的。
ActvxDoc.exe 用于查看ocx控件的工具
(图1)
(2)用于进行打包用的ocx控件XXXX.ocx。
(3)用于进行ocx控件注册的XXXX.inf。
(4)用于ocx文件所引用的文件如:XXXX.dll , XXXX.lic,XXXX.ico等,如图2。
(图2)
步骤
我们现在开始来制作cab文件啦~~~
- 我们先把所有的文件放到E:\browseocx 目录下面去,如图3。
(图3)
- 单击“开始”->“运行(R)”-> 输入“cmd” -> 回车 -> 进入到操作的控件所在的目录,如图4所示
(图4)
- 创建PVK文件(私人密匙文件),在命令行中输入“makecert -sk BrowseOcx BrowseOcx.pvk -n CN=XXXXXXXX”,然后回车,如图5所示
(图5)
创建CER文件(公司证书),在命令行中输入“makecert -sk BrowseOcx.pvk BrowseOcx.cer”,然后回车,如图6所示,若出现“Successed”提示,则
会在E:\browseocx目录下生成BrowseOcx.cer文件,如图7所示
(图6)
(图7)
- 创建SPC测试软件出版商证明书,在命令行中输入“cert2spc BrowseOcx.cer BrowseOcx.spc”,然后回车,如图8所示,若出现“Successed”提示,
- 则会在E:\browseocx目录下生成BrowseOcx. spc文件,如图9所示
(图8)
(图9)
- 创建INF文件,用记录本编辑以下信息
[version]
signature="$Chicago$"
AdvancedINF=2.0
[Add.Code]
GDIPLUS.DLL=GDIPLUS.DLL
mfc100.dll=mfc100.dll
msvcp100.dll=msvcp100.dll
msvcr100.dll=msvcr100.dll
acemfcd.dll=acemfcd.dll
GoldenClient.dll=GoldenClient.dll
GoldenObjects.dll=GoldenObjects.dll
piapi32.dll=piapi32.dll
RtdbBridge.dll=RtdbBridge.dll
BrowseOcx.ocx=BrowseOcx.ocx
BrowseOcx.lic=BrowseOcx.lic
BrowseOCX.ico=BrowseOCX.ico
[GDIPLUS.DLL]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=6,0,3260,0
[mfc100.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=10,0,40219,1
[msvcp100.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=10,0,40219,1
[msvcr100.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=10,0,40219,1
[acemfcd.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=5,4,1,0
[GoldenClient.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=1,0,3,11
[GoldenObjects.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=1,0,3,11
[piapi32.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=1,6,1,10
[RtdbBridge.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=1,0,0,0
[BrowseOcx.ocx]
file-win32-x86=thiscab
clsid={F6157CB2-D9CD-4780-B3BF-C1EF13D48446}
RegisterServer=yes
DestDir=11
FileVersion=2,0,1,0
[BrowseOcx.lic]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
[BrowseOCX.ico]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
(图10)
(图11)
在BrowseOcx.inf的内容里,[version]和[Add.Code]项是必须的,[Add.Code]的键值项的多少取决于以下你所配制项的多少。
[mfc100.dll]、[msvcp100.dll]就是上面我所说不是必须的项,只要你想把mfc100.dll、msvcp100.dll包括在发布包里,那这么两项就必
须写在inf里,而这三项的具体内容是固定的,可复制过去即可。最为关键的就是[BrowseOcx.ocx]项,其中有clsid和FileVersion就
是BrowseOcx.ocx的classId和version,这要求必须一至,否我们发布出去的CAB包时不能在客户端自动更新下载安装。说到这里,那我们如
何才能知道BrowseOcx.ocx里面的classId和version呢?我在上面的必备条件里介绍到有一个用于查看ocx控件的工具ActvxDoc,对,就是用
它,我们双击这个文件运行它,win7下可能不能运行。
创建CAB文件,在命令行中输入“cabarc -s 6144 n BrowseOcx.cab GDIPLUS.DLL mfc100.dll msvcp100.dll msvcr100.d
ll acemfcd.dll GoldenClient.dll GoldenObjects.dll piapi32.dll RtdbBridge.dll BrowseOcx.lic BrowseOCX.ico BrowseOc
x.ocx BrowseOcx.inf”,然后回车,如图12所示:
(图12)
使用Code Signing Wizard签署一个CAB文件,首先双击运行工具集里面的signcode.exe(或在命令行里直接输入“signcode”后回
车),系统会弹出如图13所示的数字签名向导:
(图13)
单击“下一步(N)”按钮,来到图14所示,选择要进行数字签名的且已做成CAB包的文件BrowseOcx.cab文件。
(图14)
选择好CAB包后单击“下一步(N)”按钮,在选择想要的签名类型里选择“自定议(C)”并单击“下一步(N)”按钮,如
图15所示。
(图15)
接下来单击“从文件选择(F)”按钮,选择刚刚制作的BrowseOcx.cer,如图16所示:
(图16)
在图16中单击“下一步(N)”按钮来到图17,然后在图17里选择“CSP中的私钥(K)”
(图17)
在图17中单击“下一步(N)”按钮,然后在图18中的散列算法中选择“shal”,并单击“下一步(N)”按钮
(图18)
在“证书路径中的证书”中选择“证书路径中的所有证书,包括根证书(C)”,在“其它证书(可选)”中选择“包括在以
下PKCS #7 证书(.p7b)文件中的证书(P):”,并单击“浏览(R)…”按钮选择BrowseOcx.spc文件,选择完后
单击“下一步(N)”按钮,如图19所示:
(图19)
接下来在弹出的“数据描述”窗口中输入公司的名称和网址并单击“下一步(N)”按钮,如图20所示(这的描述,必
须要和先前第三部制作PVK的描述一致)
(图20)
现大部份工作都已完成,在接下来的一步当中是可选的操作,其作用只是为CAB加入时间戳,此步骤完全可以不做,如
图21所示:
(图21)
完成
(图22)
这个时候我们已经完成制作cab包
在服务器上的html中加入OBJECT标签:
浏览器有的时候可能会禁用掉ActiveX控件,我们需要主动设置浏览器选项。
注意:打开IE浏览器工具Internet选项安全自定义级别启用所有ActiveX控件
如:
<OBJECT id="Chart" codeBase="./Download/CfxIEAx.cab#Version=5,5,3,0" type="application/x-oleobject" heigh
t="910" width="1870" classid="CLSID:21F49842-BFA9-11d2-A89C-00104B62BDDA" VIEWASTEXT>
<PARAM NAME="LICENSE" VALUE="./License/CfxIE.lic" />
</OBJECT>
ActiveX控件打包成Cab实现浏览器自动下载安装相关推荐
- ActiveX控件打包成Cab置于网页中自动下载安装
From: http://www.iteye.com/topic/110834 makeCAB.rar (188.5 KB) [背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX ...
- ActiveX控件打包成Cab置于网页中自动下载安装 (收藏未实践测试)
from http://blog.csdn.net/htqlhy/article/details/7937897?locationNum=12 [背景] 做过ActiveX控件的朋友都 ...
- ActiveX控件打包成Cab置于网页中自动下载安装(转载)
原文出自http://www.iteye.com/topic/110834 [背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必 ...
- ActiveX控件打包、签名、嵌入详解
ActiveX控件打包.签名.嵌入详解 前言 在我们的一个项目中,使用到了大华网络监控摄像头枪机,网络上下载了其ActiveX插件,但是发现其所提供的类库没有打包处理.这就导致我们每次给用户安装的时候 ...
- C#BS通过ActiveX控件及制作CAB包来调CS
1) 创建Visual Studio解决方案 "ActiveXSolution". 2)在解决方案ActiveXSolution中添加 Windows窗体应用程序 "CS ...
- C#开发ActiveX控件及制作CAB包
一个项目要用到 ActiveX 控件,参照网上众多的例子,ActiveX控件倒是很容易就搞出来了: 然后做了一个[ 安装项目],倒是可以使用,只不过需要在客户端手动点击安装,下一步,下一步-觉得不是很 ...
- ActiveX控件打包cab时INF文件的编写
虽然微软对ActiveX越来越不信任,但是这个技术还是很多人喜欢用的,这个博客的编辑器貌似就用到了ActiveX. 在我们编写好ocx控件后只有在打包成CAB文件加入数字签名后才能正常发布,如果你用的 ...
- ActiveX控件打包cab时INF文件的编写[转]
虽然微软对ActiveX越来越不信任,但是这个技术还是很多人喜欢用的,这个博客的编辑器貌似就用到了ActiveX. 在我们编写好ocx控件后只有在打包成CAB文件加入数字签名后才能正常发布,如果你用的 ...
- ceb java_OCX控件打包成ceb
1. 将ocx文件以及第三方dll文件打包成cab文件: Internet 软件分发单位是"软件包",它由包含.INF文件或软件分发.OSD文件(或两者都包括)的.CAB文件所组成 ...
最新文章
- LLVM基础技术图例
- cfa三级真题和mock_两年高分过CFA三级的女学霸:复习秘诀刷爆了朋友圈!
- VS2010 + CUDA7.5 + GPU编译OpenCV2.4.9
- 模拟浏览器自动化测试工具Selenium之六设置代理篇
- 提高Java的锁性能
- Spring DataSource JNDI - Tomcat JNDI 配置示例
- IT桔子分布式项目1
- MySQL—Install/Remove of the Service Denied
- velocity 变量 获取_velocity 怎么得到项目根路径
- win10+Ubuntu17.10双系统安装(惠普台式机)
- 大智慧交易系统测试软件,大智慧交易系统测试平台使用操作教程.doc
- VS2010 SP1安装失败
- matlab声明全局变量 global
- 磁碟机病毒(Dummycom)专杀工具
- Word——如何固定文章中的公式
- 陕西活性炭需求分析_活性炭市场需求分析及发展趋势预测
- 最详细的Android Bitmap回收机制(从2.3到7.0,8.0)
- 【烈日炎炎战后端】MySQL编程(3.6万字)
- 修改oracle nls_language
- 国务院办公厅关于2013年部分节假日安排的通知(转载)
热门文章
- nodejs探秘:require加载模块的原理及代码实现
- iPhone以旧换新折抵价 苹果XS用户一眨眼亏了550元
- 惊天消息!美国重启病毒实验,或对人类造成巨大威胁...
- 【初探篇】反向代理在系统结构中的应用场景
- “打工皇帝”唐骏语录
- Google PageRank 的过去、现在和未来
- 基于客户端与服务器的管理系统,基于客户端和服务器的点菜系统.doc
- 宾馆客户管理系统数据库java_JAVA连接数据库酒店管理系统.docx
- CVPR2021 最佳论文 Giraffe,当之无愧的最佳,或开创新的篇章
- python凯撒密码详解_四十八、Python用smtp发邮件详解(163和QQ邮箱)