OCX控件CAB打包手册及升级方法
目录(?)[+]
OCX:OCX称为对象类别扩充组件(Object Linking and Embedding (OLE) Control eXtension);
CAB:压缩包文件。存储多个压缩文件的单个压缩包文件。这些文件通常用于软件安装,还用来减小文件大小和缩短 Web 内容的相关下载时间。
打包步骤
制作CAB文件时需要将所有的相关文件都包含进去,一般需要将OCX做CAB打包即为ocx的开发者本人明确知道所依赖的动态链接库,如果不了解OCX依赖于那些动态链接库,可以通过Depends(VC自带的)检查需要的文件,然后使用inf文件将这些东西都写进去。
(1)制作inf文件
在此处不对INF文件本身的格式做额外说明,如有兴趣可自行上网搜索。
此OCX控件CAB打包的INF文件如下书写,首先此控件不仅仅只有一个ocx文件,还具备其它的动态链接库,同时还有ini配置文件:
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
CCEA.ocx=CCEA.ocx
DesktopAgent.dll=DesktopAgent.dll
ProxySock.dll=ProxySock.dll
Web2Agent.dll=Web2Agent.dll
Config.ini=Config.ini
[CCEA.ocx]
file-win32-x86=thiscab
clsid={6F82C754-6C31-43EA-9818-E95AD4E872FC}
FileVersion=1,6,0,44
RegisterServer=yes
DestDir=10
[DesktopAgent.dll]
file-win32-x86=thiscab
FileVersion=1,6,2,27
DestDir=10
[ProxySock.dll]
file-win32-x86=thiscab
FileVersion=1,6,0,1
DestDir=10
[Web2Agent.dll]
file-win32-x86=thiscab
FileVersion=1,0,0,0
DestDir=10
[Config.ini]
file-win32-x86=thiscab
FileVersion=1,0,0,2
DestDir=10
下面对以上INF文件的内容做详细说明:
[Version]区的内容可以不考虑,接下来就是最重要的[Add.Code]区,格式为XXXX=XXXX;前面是要下载的文件名,后面是对应这个文件的区域名,可以是任何名字,不过一般都是和文件的名字相同,这样方便维护。
再接下来是各个文件的区域,[XXX]其中XXX为[Add.Code]区中的文件名,其中[CCEA.ocx]文件区域的参数比其它文件多,这是因为其为此CAB的核心,其它文件均依赖于它且它需要自动注册,首先来讲解[CCEA.ocx]部分:
(1)file-win32-x86=thiscab
这个值告诉ie到哪里去得到这个ocx,,file一共包括三个部分,第一部分是file,这个永远都是这样的;第二部分告诉声明支持的OS,win32表示windows,mac就是苹果MAC OX了;第三部分是CPU类型,比如说x86、mips等。
file的值可以取三个:一个URL、ignore和thiscab,如果是URL则说明到URL所在的位置去下;如果是ignore说明对于这种OS和CPU,不需要下载这个文件;如果是thiscab就在当前的cab文件中了;
(2)clsid={6F82C754-6C31-43EA-9818-E95AD4E872FC}
此处需要填写该ocx的class guid;
(3)RegisterServer=yes
此处可以取两个值yes和no,如果为yes则说明ie要注册该ocx,如果是no就不必注册;
(4)DestDir=10
此处的值是ocx将要存到本地硬盘的位置,如果它的值是10,则将ocx放到\Windows或者\WinNT下;如果是11,则放到\Windows\System或者\WinNT\System32下;如果是空(就是没有值)则会放到\Windows或者\WinNT下的Downloaded Program Files目录下;此处选为10是放在\Windows是考虑\Windows下文件量小易于操作便于卸载;
(5)FileVersion=1,6,0,44
此处说明了ocx的版本号,目前ocx版本号为1.6.0.44,此处也是CAB自动升级的判断依据,其它文件区域内容标识与[CCEA.ocx]部分,此处不再赘叙。
(2)制作CAB文件
在此之前你需要实现ActiveX控件安全的初始化和脚本,相关信息可以查阅ActiveX控件实现安全的初始化和脚本利用iexpress.exe(windows提供的一个向导式cab制作工具)进行打包,进入CMD键入iexpress回车即显示如下界面:
选“Create new Self Extraction Directive file”,点“下一步”,出现如下框:
选择“Create compressed files only(ActiveX Installs)”,点击下一步,出现如下框图,点击Add,添加INF中标注的所有文件:
点击下一步,点击Browse,选择CCEA.CAB文件的存放地址并命名CAB文件名,此文件名在IE加载时html标签时使用,并且要选中“Store files using Long File Name inside Package“:
点击下一步:
此处选择“Don’t save”,一直点击下一步,直到完成,最后在前面选择的位置会出现以前面所取名字一致的CAB文件:
至此CAB的打包工作已经完成。
CAB增加数字签名
此处不做说明,可以申请测试证书供测试,也可以自己写证书,只不过根证书需要重新安装,如果是商业化应用的话还是购买微软认证机构的代码签名,这样不需要额外的操作即可正常使用增加签名的CAB文件,只在第一次使用时安装部署后续的再次使用没有任何提示报警即可加载,一般购买机构会提供签名的工具,可能是批处理工具也可能给相应文档,最终使用的还是signtool.exe签名工具。
CAB升级方式
OCX及依赖DLL升级
如果CAB文件中ocx机器附属dll文件需要更新,那么只可能是版本更新,要么是ocx版本升级要么是dll文件版本升级,无论哪一种形式ocx的版本号均需要都是需要通过正常的发布流程发布,所以这两种形式可视为一致。
此时需要升级CAB打包过程中INF文件中相应的文件区域中的版本号与有更新的文件的文件版本号保持一致,比如此时ocx和DeskAgent.dll有更新,此时新发布的版本中版本号分别分别更新为1.6.0.45和1.6.2.28,INF文件中相应区域应修改为:
[CCEA.ocx]
file-win32-x86=thiscab
clsid={6F82C754-6C31-43EA-9818-E95AD4E872FC}
FileVersion=1,6,0,45
RegisterServer=yes
DestDir=10
[DesktopAgent.dll]
file-win32-x86=thiscab
FileVersion=1,6,2,28
DestDir=10
重新打包签名替换原本用来分发的旧CAB包,同时在html标签中CAB的版本号要升级为与CAB文件中OCX文件的版本号一致。
以上是一种标准的升级方式有助于在每次升级过程中明确相应的版本关系而不至于在多次升级之后版本号的混乱,同时能够保证签名之后的CAB文件在安装之后即可正常使用不再有下载安装的步骤,但实际上只要升级了OCX的版本号并且将html里的版本号一并升级之后无论其它依赖的文件是否更新、版本号是否升级,所有文件均重新下载安装注册替换为新CAB文件中的文件,这点是需要强调注意的(至于html标签怎么写后面会有说明)。
只更新INI配置文件
目前没有找到有效的方法在不更新OCX文件及其附属dll的前提下自动更新,目前的建议的方法是将更换了新的ini配置文件后重新打包CAB并签名,不更改INF文件的前提条件下更新html中标签的版本,更新完之后所有坐席均保证做一次业务系统登录以更新CAB文件,之后再将html标签中的版本改回原先的版本号,此举是保证坐席之后每次登录均不再需要重新下载安装即可直接使用,保证良好的适用性。
CAB加载的HTML实现
原先第三方业务系统使用OCX控件需要在业务系统的html实现如下代码:
<OBJECT id="UsbossViewer" name="objocx"
classid="clsid:6F82C754-6C31-43EA-9818-E95AD4E872FC"
width="100%" height="250">
</OBJECT>
若要在OCX文件直接加载时初始化属性,需要在OBJECT标签之内初始化属性,具体结构变为如下结构:
<OBJECT id="UsbossViewer" name="objocx"
classid="clsid:6F82C754-6C31-43EA-9818-E95AD4E872FC"
width="100%" height="250">
<PARAM NAME="XXXX" VALUE="XXXX"/>
</OBJECT>
下面讲述第三方业务系统在html标签中如何使用CAB文件,html标签实例如下:
<OBJECT ID= "UsbossViewer " name="objocx" CLASSID= "CLSID:6F82C754-6C31-43EA-9818-
E95AD4E872FC" CODEBASE= "CCEAOCX.CAB#version=1,6,0,44" width="100%" height="250">
</OBJECT>
此处"objocx"可任意命名,在之后使用控件的接口或者属性则以objocx. 方法名或者objocx. 属性即可,“CODEBASE=”是一个比较重要的key,其中CCEAOCX.CAB是CAB文件打包时的命名,而之后1,6,0,44则是此CAB的版本号,但是CAB本身是没有版本号的,因此一般来说将此版本号设置得与CAB文件中ocx的版本号一致,这也是建议的一种方式,在更新CAB文件中有相当大的作用。
若要像OCX文件直接加载时初始化属性,其方式是一样的,同样在OBJECT标签之内初始化属性:
<OBJECT ID= "UsbossViewer " name="objocx" CLASSID= "CLSID:6F82C754-6C31-43EA-9818-
E95AD4E872FC" CODEBASE= "CCEAOCX.CAB#version=1,6,0,44" width="100%" height="250">
<PARAM NAME="XXXX" VALUE="XXXX"/>
</OBJECT>
使用URL的CAB部署方式
CAB文件的使用描述的CAB部署方式是必须在加载页面的的本级目录下部署CAB文件,若要指定路径的话其格式应该是:
<OBJECT ID= "UsbossViewer " name="objocx" CLASSID= "CLSID:6F82C754-6C31-43EA-9818-
E95AD4E872FC" CODEBASE= "http://10.130.40.220:9081/CAB/OCXold.CAB#version=1,6,0,44" width="100%" height="250">
</OBJECT>
其中http://10.130.40.220:9081/CAB/OCXold.CAB即为CAB放置的绝对路径,http://10.130.40.220:9081/CAB/为测试环境的路径。
OCX控件CAB打包手册及升级方法相关推荐
- 编写ActiveX控件及其打包方法
1.ActiveX控件概述 ActiveX控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在Windows操作系统以OCX结尾的文件,OCX代表"对象链接 ...
- VS2010下ocx开发:(2)在C#程序中调用ocx控件
在本文中,给出一个C#示例程序,调用上一篇博文中创建的MultiplyDemo.ocx控件.注意需要保证该控件已经注册过. 启动Visual Studio 2010,使用C#创建一个Windows窗体 ...
- OCX控件在win7系统普通用户权限下,无法使用的问题。
最近经理让做一个简单的小例子,基于mfc对话框,调用我自己写的OCX控件,给用户看个例子. 我的机器是32位win7系统,超级管理员权限. 发给用户后,用户运行程序时,控件不显示. 我切换到普通用户下 ...
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是 ...
- 海康威视视频ocx控件开发总结
因工作需要,需要开发一个海康威视的视频ocx控件,嵌入到intouch,组态王一类的组态软件中使用. 之前从没做过ocx控件的开发,连MFC的开发也没做过,折腾了几天,终于基本完成.记录一下这个过程. ...
- Mp3Play.ocx控件让音乐之声响起来
Mp3Play控件是由德国Dialog Dedien公司编写的一个MP3软件解码器,它能在Windows 9x和NT 4两种平台上工作,用户可以通过支持ActiveX控件的Windows编程语言(例如 ...
- 做VB的,经常注册和反注册OCX控件和DLL链
做VB的,经常注册和反注册OCX控件和DLL链 但是,每次都要 "开始"--"运行" --"regsvr32 C:\********\******.o ...
- VB制作OCX控件的步骤
下面列出制作OCX控件的步骤: 一:新建OCX 打开VB 选择新建工程在对话框中选择ActiveX 控件(如图一(map1.gif))打开后会见一空的文档这就是 OCX控件的初始界面.想看一看空OCX ...
- C#调用第三方ocx控件 (winform /aspx)
C#调用第三方ocx控件 1..net环境在工具箱上点右键,选择自定义工具箱,然后选择你需要的COM或者OCX控件就可以了. 2.在自定义工具箱中加入相应的控件,设置id,在客户端脚本中直接引用它的I ...
最新文章
- GO语言教程4:defer(延迟语句)详解
- U3D架构系列之- FSM有限状态机设计五
- texmaker不能点击跳转到行
- html选择和按钮间距,html - 想要在按钮之间添加间距
- python编程从入门到实践看完了看什么-小白Python编程从入门到实践——列表是什么...
- 单例模式的几种实现方式
- C语言实现了一个顺序栈(附完整源码)
- apache beam_Apache Beam ML模型部署
- Leetcode题目:Valid Anagram
- 第九城市:比特币矿机共贡献大约693 PH/s的总算力
- fastjson jsonobject 转bean失败_干掉quot;FastJsonquot;?
- n卡驱动要下java吗_N卡驱动要下载哪一个?NVIDIA显卡驱动下载方法
- 登录注册,文件增删查改实现
- 【PR 基础】轨道遮罩键、交叉溶解的简单使用
- Qt:一个简洁漂亮的高仿网易云播放器
- macOS 使用 X11 运行远端 linux 中的 x11 client 图形程序
- 【我的OpenGL学习进阶之旅】什么是TGA文件以及如何打开TGA文件?
- Openstack Queens版本双节点架构笔记9,Ceph安装1:
- UltraEdit打开文件,中文显示为乱码的解决方法
- Python数据分析实战之营销组合模型