ActiveX控件打包、签名、嵌入详解
ActiveX控件打包、签名、嵌入详解
前言
在我们的一个项目中,使用到了大华网络监控摄像头枪机,网络上下载了其ActiveX插件,但是发现其所提供的类库没有打包处理。这就导致我们每次给用户安装的时候,均需要手动注册一下。比较要命的是,一旦用户电脑上的摄像头黑屏或者不能用的时候,我们都需要远程指导用户怎么操作,相当麻烦。所以,遂决定将这些类库打包一下,以便实现自动无值守安装。
这里先将工具列举一下:
iexpress.exe 用于CAB打包
signtool.exe 用于附加数字签名
makecab.exe 用于CAB打包
http://www.ca365.com 用于申请免费数字证书
下面让我们开始进行制作。
第一步,准备Inf配置文件。
首先,新建一个后缀名为 dahua.inf 的文件并打开,输入如下内容并保存:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
[version] signature="$CHICAGO$" AdvancedINF=2.0 [DefaultInstall] CopyFiles=files RegisterOCXs=RegisterFiles [DefaultUninstall] cleanup=1 Delfiles=files UnRegisterOCXs=RegisterFiles [SourceDisksNames] 1 = %DiskName%,"dahua.cab",1 [SourceDisksFiles] RealPlayX.ocx=1 dhnetsdk.dll=1 ssleay32.dll=1MP3Decoder.dll=1libeay32.dll=1jpegdec.dll=1IvsDrawer.dll=1dllmpeg4.dll=1dllh264.dll=1DllDeinterlace.dll=1dhplay.dll=1dhdvr.dll=1DhDecode.dll=1dhconfigsdk.dll=1AmrDll.dll=1AACDecoder.dll=1 [RegisterFiles] %11%\dahua\RealPlayX.ocx [DestinationDirs] files=11, dahua [files] RealPlayX.ocx=RealPlayX.ocxdhnetsdk.dll=dhnetsdk.dllssleay32.dll=ssleay32.dllMP3Decoder.dll=MP3Decoder.dlllibeay32.dll=libeay32.dlljpegdec.dll=jpegdec.dllIvsDrawer.dll=IvsDrawer.dlldllmpeg4.dll=dllmpeg4.dlldllh264.dll=dllh264.dllDllDeinterlace.dll=DllDeinterlace.dlldhplay.dll=dhplay.dlldhdvr.dll=dhdvr.dllDhDecode.dll=DhDecode.dlldhconfigsdk.dll=dhconfigsdk.dllAmrDll.dll=AmrDll.dllAACDecoder.dll=AACDecoder.dll [RealPlayX.ocx]file-win32-x86=thiscabclsid={30209FBC-57EB-4F87-BF3E-740E3D8019D2}DestDir=11FileVersion=1,0,0,1RegisterServer=yes[Strings] DiskName = "dahua" |
最开始一般是[Version]区,这里不用管,保持默认内容就行。
然后是[DefaultInstall]区,表明文件拷贝的地方,我们这里为[files]区下的所有文件,并将[RegisterFiles ]区下的文件进行注册。
然后是[RegisterFiles]区,表明注册System32\dahua文件夹下的RealPlayX.ocx
然后是[DestinationDirs]区,11表明放到 Windows\System或者\WinNT\System32下,dahua则是创建的子级文件夹。
最后是[RealPlayX.ocx]区,第一个file值告诉ie到哪里去得到这个ocx,file一共包括三个部分,第一部分是file,这个永远都是这样的;第二部分告诉声明支持的OS,win32表示windows,mac就是苹果MAC OX了;第三部分是CPU类型,比如说x86、mips等。file的值可以取三个:一个URL、ignore和thiscab,如果是URL则说明到URL所在的位置去下;如果是ignore说明对于这种OS和CPU,不需要下载这个文件;如果是thiscab就在当前的cab文件中了。第二部分是RegisterServer,可以取两个值yes和no,如果为yes则说明ie要注册该ocx,如果是no就不必了;接下来是clsid,需要填写该ocx的class guid。再下来是DestDir,它的值是ocx将要存到本地硬盘的位置,如果它的值是10,则将ocx放到\Windows或者\WinNT下;如果是11,则放到\Windows\System或者\WinNT\System32下;如果是空(就是没有值)则会放到\Windows或者\WinNT下的Downloaded Program Files目录下;最后是FileVersion,说明了ocx的版本号。
第二步,制作CAB包。
打开iexpress,按照下面的顺序来一一进行:






注意:在进行第五步的时候,请注意文件夹里面一定要放置makecab.exe,否则会导致生成不成功。
所有步骤进行完成后,会得到一个dahua.cab包。
第三步,对CAB包进行签名。
首先,我们需要申请一个数字签名证书。
打开http://www.ca365.com/网站,点击免费证书下的“用表格申请证书”选项,这时会弹出“申请免费证书“页面。其中,“识别信息”可以随意填写,“证书用途”要选择“代码签名证书”,“加密服务提供”是用微软提供的“Microsoft Strong Cryptographic Provider”,其他默认,点“提交”即可。最后点击”下载证书“就可以把生成的”大华网络监控.cer”下载到自己的电脑中。
然后,我们需要将数字签名证书导入到IE中。
打开IE浏览器,打开菜单,点选”工具“按钮,弹出下拉菜单,选择”Internet选项“,切换到”内容“选项卡,点击”证书“按钮,点击”导入“按钮,导入刚刚生成的数字签名证书。导入成功后,我们就可以看到相关证书信息了。

之后,打开signtool.exe,在命令行窗口下输入signtool.exe signwizard来启动可视化安装界面。按照如下图示一步一步进行:







注意,其中一步需要填写”给数据盖时间戳“,我们将”将时间戳添加到数据中“ 选中,然后在时间戳服务URL栏写入:
http://timestamp.verisign.com/scripts/timstamp.dll
做完这一步,我们就可以得到一个完整的数字签名包。
第四步:嵌入到网页中使用。
打开网页,在需要嵌入的地方写入如下代码:
1: <object id="AV_RealPlayX" style="width:100%; height:100%;"
2: classid="CLSID:30209FBC-57EB-4F87-BF3E-740E3D8019D2"
3: codebase="DaHua.CAB#version=1,0,0,1">
4: <param name="_Version" value="65536" />
5: <param name="_ExtentX" value="22357" />
6: <param name="_ExtentY" value="16589" />
7: <param name="_StockProps" value="0" />
8: </object>
其中param根据你的activex的控件的需要进行配置。尤其需要注意classid和codebase这两个属性,只要配置对了就行。
第五步:IE权限设置。
由于Activex只能运行在支持Activex的浏览器中,尤其是IE中,所以这里我们需要对IE浏览器进行下设置。
打开IE,点击”工具“菜单,点击”Internet选项“,在弹出的窗口中,选择”安全“标签,切换到”可信站点“,点击”自定义级别“,将”对标记为可安全执行脚本的ActiveX控件执行脚本“设为”启用“;将”对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本“设为”启用“;将”下载未签名的ActiveX控件“设为”提示“;将”下载已签名的ActiveX控件“设为”启用“即可。
然后点击”站点“按钮,将”http://localhost“添加到可信列表,并去掉勾选”对该区域的所有站点要求服务器验证(https:)“。
最后重启浏览器。
第六步:设置完毕,运行。
设置完毕后,打开浏览器,输入网址,运行:
首先,我们可以成功看到视频效果:

然后打开System32文件夹,我们可以看到一个名称为dahua的文件夹被建立,并且所有的dll和ocx都被放入了进来。
好了,就是这些,希望对你有用。谢谢。
添加信任列表
最后需要说明,运行此Activex插件需要将当前网址添加到信任列表。请将如下的脚本保存为vbs文件,然后运行即可。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
on Error Resume NextConst HKEY_CURRENT_USER = &H80000001strComputer = "."Set objReg=GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\" _ & "ZoneMap\Ranges\Range1"objReg.CreateKey HKEY_CURRENT_USER, strKeyPathstrValueName = "http"dwValue = 2strValueNameEx = ":Range"dwValueEx="123.7.63.174"objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueNameEx, dwValueExobjReg.SetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue |
ActiveX控件打包、签名、嵌入详解的更多相关文章
- 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析
第三章 Android控件架构与自定义控件详解 1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWin ...
- ActiveX控件打包成Cab置于网页中自动下载安装(转载)
原文出自http://www.iteye.com/topic/110834 [背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必 ...
- ActiveX控件打包成Cab实现浏览器自动下载安装
前言 我们在浏览器中使用我们自己的一些OCX,或者是DLL这一类的文件,在X86的机器上需要我们手动将这些文件拷贝到Windows/System32 文件夹下面去,然后通过Dos命令regsvr32 ...
- ActiveX控件打包成Cab置于网页中自动下载安装 [转]
http://blog.sina.com.cn/s/blog_520c32270100nopj.html 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用, ...
- ActiveX控件打包成Cab置于网页中自动下载安装
[背景] http://www.360doc.com/content/13/1120/20/10159093_330853247.shtml 做过ActiveX控件的朋友都知道,要想把自己做的Acti ...
- VB6.0中WinSock控件属性和方法详解
原文链接:http://liweibird.blog.51cto.com/631764/653134 WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器 ...
- DevExpress控件汉化教程详解
所有Developer Express .NET产品都有本地化资源,比如按钮属性,控件属性描述,菜单项,确认和错误的信息等等,所有这些资源字符串可以很容易地被翻译成各种语言. 先看下面汉化前后的图片: ...
- ASP.NET验证控件应用实例与详解。
ASP.NET公有六种验证控件,分别如下: 控件名 功能描叙 1RequiredFieldValidator(必须字段验证) 用于检查是否有输入值 2CompareValidator(比 ...
- 第二章 控件架构与自定义控件详解 + ListView使用技巧 + Scroll分析
1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWindow将DecorView作为整个应用窗口的根V ...
随机推荐
- Java的Package和Classpath
Package 在Java中,Package是用来包含一系相关实例的集合.这些相关联的实例包括:类.接口.异常.错误以及枚举. Package主要有一些的几点作用: Package可以处理名字冲突,在 ...
- 动态规划VS分治策略
•在用分治法解决问题时,由于子问题的数目往往是问题规模的指数函数,因此对时间的消耗太大. •动态规划的思想在于,如果各个子问题不是独立的,不同的子问题的个数只是多项式量级,而我们能够保存已经解决的子问 ...
- Lua Coroutine详解
协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西.线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程 ...
- 如何关闭emacs开启时自己打开的欢迎界面
EMACS在开启后,会自动打开一个欢迎界面.如果要去除他,可以在用emacs或其实编辑工具编辑~/.emacs文件. 在最下面一行加上,保存退出即可. (setq inhibit-startup-me ...
- JSon转化为DaTable
/// <summary> /// 将json转换为DataTable /// </summary> /// <param name="strJson" ...
- MySQL初探
慕课网http://www.imooc.com/learn/122 课程学习笔记 修改MySQL提示符 shell>mysql --prompt 提示符 my ...
- Javascript.//DOM
文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.Document Object Model的历史可以追溯至1990年代后期微 ...
- linux文件系统节点详解
linux文件系统有两层结构,逻辑结构和物理结构.也就是inode和block. 每个文件都有一个inode, 记录文件属性:权限,时间还有最重要的block号码. block是实际存放文件内容的地方 ...
- Hibernate配置log4j日志环境
1.准备所需的jar 说明:具体所使用的jar包的版本与你所使用的Hibernate版本有关,我用的是(hibernate-release-4.3.11.Final) <1>准备slf4j ...
- c#大数加法
在C#中,我们经常需要表示整数.但是,c#的基本数据类型中,最大的long也只能表示-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之间的数 ...