为ActiveX空间添加Cab文件

目的:

1.  依赖MFC库或ATL库等开发的ActiveX控件要正常的运行必须依赖这些库。但是你不能保证你用户的机器上装有与你开发环境相同的库,所以,当你发行一个ActiveX控件,你必须要包证这些依赖库的存在。

2.  在网络上运行的ActiveX控件,必须要保证你发行的控件小的足以让用户忍受下载的时间,当然是越小越好。控件本身你会发现微不足道,但你不得不还要考虑到他支持库的空间,你会发现的加上它的支持库,你的控件会变的臃肿不堪,所以你必须要找到一种方法为你的控件减减肥。

3.  得到控件后,使用前当然还要给它注册,但是你别忘了,还有他那些个依赖库的注册工作等着你耐心的一个个的regsvr32掉。

哦,天哪,用户只是想随便的浏览一个网页而已却要他做这么麻烦的工作,谁愿意做,我们上帝们才不会关心你这些技术细节,他们希望在电脑前轻点下鼠标就一切正常,他们要的是自动化!而这一切,Cab能帮你完全解决。

原理:

通过高压缩技术(比ZIP压缩度还高3成)——打包成Cab压缩文件。当用户第一次浏览你控件所在的网页时,它会自动提示控件下载,下载后会根据cab文件中的*.inf文本文件的来寻找你电脑的上相应的DLL(控件依赖库及控件本身,ocx本就是一种特殊的DLL)是否注册过,如果没有,会自动帮你注册,然后控件既可以正常使用。

(注:关于cab压缩技术,请参考MSDN或是网上相关搜索)

创建cab文件:

1.  创建 INF 文件。

INF 文件是一个文本文件,用以指定为控件的运行而需要显示或下载的文件(如 DLL 文件或其他 OCX 文件)。INF 文件使您得以将所有所需的文件捆绑在一个压缩的 CAB 文件中。默认情况下,版本号同用户硬盘上的现有文件相同的文件不下载。有关 INF 文件及其选项的更多信息,包括如何创建与平台无关的 INF 文件,请参见 Platform SDK 文档中的关于 INF 文件和使用 INF 文件(在 MSDN Library/Setup 和 System Administration/Setup/Setup API/Overview/Setup Applications 目录下)。

举例来说,下面的 INF 文件用于为AxYourControl控件创建 CAB 文件。AxYourControl是由某一库支持开发的(MFC,ATL或其他),假设他所支持库的主要由 Need1.dll,Need2.dll,Need3.dll三个DLL库(具体有哪些库文件根据情况查阅MSDN相关内容)。

; Sample INF file for AxYourControl.OCX

[version]

signature="$CHINA$"

AdvancedINF=2.0

[Add.Code]

AxYourControl.ocx= AxYourControl.ocx

Need1.dll= Need1.dll

Need2.dll= Need2.dll

Need3.dll= Need3.dll

; needed DLL

[Need1.dll]

file-win32-x86=thiscab

FileVersion=2,00,0,7024

DestDir=11

RegisterServer=yes

; needed DLL

[Need2.dll]

file-win32-x86=thiscab

FileVersion=2,00,0,7024

DestDir=11

RegisterServer=yes

; needed DLL

[Need3.dll]

file-win32-x86=thiscab

FileVersion=2,00,0,7024

DestDir=11

RegisterServer=yes

[AxYourControl.ocx]

file-win32-x86=thiscab

clsid={4CBBC676-507F-11D0-B98B-000000000000}

FileVersion=1,0,0,1

RegisterServer=yes

; end of INF file

此 INF 文件指定需要在系统上安装给定版本的 Need1.DLL, Need2.DLL和Need3.DLL。如果这些DLL尚未存在于系统中,它将从用此 INF 创建的 CAB 文件中下载。“thiscab”是一个关键字,表示 CAB 包含此 INF。也可通过指定一条绝对或相对路径,从一个 HTTP 位置下载所需的 DLL,例如:

    file-win32-x86=http://example.microsoft.com/mydir/NEEDED.DLL 

关键字“file-win32-x86”将平台标识为 x86 特定的。

可通过在 Windows 资源管理器中的文件上单击鼠标右键来获取文件的版本号。从显示的列表中选择“属性”,然后在显示的对话框中选择“版本”选项卡。有时需要在文件版本中额外插入一个 0。例如,在对话框中 ATL.DLL 的版本号显示为 2.00.7024。而在 INF 文件中,这变为 2, 00, 0, 7024。

“DestDir”是将要加载文件的目录所在的位置:11 指定系统目录为 WINDOWS/SYSTEM 或 WINNT/SYSTEM32;10 指定 Windows 目录、WINDOWS 或 WINNT。如果未指定任何 DestDir(典型情况),则代码安装在固定的 OCCACHE 目录中。

“clsid”是将要安装的控件的 CLSID。

2.  运行 CABARC 实用工具。

Cabarc.exe 是微软的一个cab文件制作工具。你可以到微软的官方网站下载CABIN SDK 工具包。下载后解压安装,在其目录下有一个Bin目录下可以找到。

应在包含源文件的目录下运行 CABARC。在命令行上,按源文件出现在 INF 中的顺序排列它们,并将 INF 文件放在最后。例如,若要从上面的 INF 文件生成 AxYourControl控件的 CAB 文件,请使用下面的命令:

…/BIN/CABARC -s 6144 n AxYourControl.CAB Need1.DLL Need2.DLL Need3.DLL AxYourControl.OCX AxYourControl.INF

-s 选项在压缩文件中保留用于代码签名的空间。n 命令指定希望创建 CAB 文件。有关 CABARC 命令和选项的列表,请在命令行上仅键入 CABARC:

…/BIN/CABARC

其他的一些补充:

1.  需要MFC控件中包含的DLL文件有MSVCRT.DLL、MFC42.DLL 和OLEPRO32.DLL,其中MFC42.DLL视你开发环境的MFC版本所定,例如本人是在vc7环境下开发控件的,所以,应该为MFC71.DLL。

2.  为ActiveX空间创建cab文件还有一个重要的话题就是将其打包为签名压缩 (CAB) 文件。签名文件使用户可以放心地下载代码安全的控件。关于这个话题,需要申请发行证书,详细情况可参见MSDN:

ms-help://MS.MSDNQTR.2003FEB.2052/vccore/html/Creating_Signed_CAB_Files_for_MFC_and_ATL_Controls.htm

3.  关于在创建INF时DLL的版本,你可以鼠标右击点出他的属性对话框,在版本一栏就可以看到了,注意,填写时,版本号之间的“.”号变换为“,”。

CAB Activex相关推荐

  1. vlc的应用之二:vlc的ActiveX及cab

    2009-05-14补充:8. Activex的卸载:9. 让vlc自动安装Activex :10. 关于vlc的Activex的说明.     vlc自带了ActiveX控件--axvlc.dll, ...

  2. ActiveX控件打包成Cab置于网页中自动下载安装

    From: http://www.iteye.com/topic/110834 makeCAB.rar (188.5 KB) [背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX ...

  3. ActiveX: 如何用.inf和.ocx文件生成cab文件

    ActiveX: 如何用.inf和.ocx文件生成cab文件 转载于:https://www.cnblogs.com/time-is-life/p/5977962.html

  4. C#开发ActiveX控件及制作CAB包

    一个项目要用到 ActiveX 控件,参照网上众多的例子,ActiveX控件倒是很容易就搞出来了: 然后做了一个[ 安装项目],倒是可以使用,只不过需要在客户端手动点击安装,下一步,下一步-觉得不是很 ...

  5. ActiveX控件打包cab时INF文件的编写

    虽然微软对ActiveX越来越不信任,但是这个技术还是很多人喜欢用的,这个博客的编辑器貌似就用到了ActiveX. 在我们编写好ocx控件后只有在打包成CAB文件加入数字签名后才能正常发布,如果你用的 ...

  6. ActiveX控件打包cab时INF文件的编写[转]

    虽然微软对ActiveX越来越不信任,但是这个技术还是很多人喜欢用的,这个博客的编辑器貌似就用到了ActiveX. 在我们编写好ocx控件后只有在打包成CAB文件加入数字签名后才能正常发布,如果你用的 ...

  7. C#BS通过ActiveX控件及制作CAB包来调CS

    1) 创建Visual Studio解决方案 "ActiveXSolution". 2)在解决方案ActiveXSolution中添加 Windows窗体应用程序 "CS ...

  8. ActiveX控件打包成Cab实现浏览器自动下载安装

    前言 我们在浏览器中使用我们自己的一些OCX,或者是DLL这一类的文件,在X86的机器上需要我们手动将这些文件拷贝到Windows/System32 文件夹下面去,然后通过Dos命令regsvr32 ...

  9. ActiveX控件打包成Cab置于网页中自动下载安装 (收藏未实践测试)

    from http://blog.csdn.net/htqlhy/article/details/7937897?locationNum=12 [背景]         做过ActiveX控件的朋友都 ...

  10. ActiveX控件打包成Cab置于网页中自动下载安装(转载)

    原文出自http://www.iteye.com/topic/110834 [背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必 ...

最新文章

  1. 华为p4支持鸿蒙功能吗_吹过的牛都一步一步给实现了!明年华为手机支持升级鸿蒙系统!...
  2. NullPointerException异常的原因及java异常??
  3. c++设计模式之简单工厂模式
  4. java class类文件结构
  5. 会计记忆总结之四:会计凭证
  6. 一文总结知识图谱基本概念和工程落地常见问题
  7. 牛客网递归错题:递归、欧几里得求最大公约数的时间复杂度、线性递归与尾递归实例区别
  8. c++学习笔记之继承和多态
  9. datagridview控件读写mysql数据库表格的方法_c# datagridview表格控件常用操作
  10. 聚类分析(一)基本思想
  11. python算法有多少个_Python算法比较两个排序的列表并计算多少个...
  12. 设置组策略的应用条件-----Windows 管理规范 (WMI)过虑器
  13. 自动手动安装CDH5
  14. Rust: format!
  15. android实现activity半透明色
  16. IE6不兼问题之Internet Explorer 无法打开 internet站点
  17. idea 的Igonre 设置
  18. css进阶四(多媒体嵌入)
  19. 计算机网络课程设计组建大型网吧局域网,计算机网络课程设计报告—组建大型网吧局域网.doc...
  20. 获取微信中的音频方法

热门文章

  1. 非负矩阵分解与K-means聚类
  2. Win7 ASP连接数据库“未找到提供程序.该程序可能未正确安装”问题
  3. 前端/后端、前台/后台的英文翻译选择
  4. Ain_搜索引擎这样用才有效率
  5. 矩阵和向量的求导法则
  6. 在OpenCV里实现Prewitt算子
  7. 数字图像处理——Sobel算子锐化、Prewitt算子锐化
  8. python获取浏览器network_如何使用python selenium获取浏览器网络日志
  9. imageAI使用教程
  10. 目标检测-ImageAI从安装到使用详解