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

摘要:
虽然微软对ActiveX越来越不信任,但是这个技术还是很多人喜欢用的,这个博客的编辑器貌似就用到了ActiveX。以上内容在没有安装任何软件的XP和2kpro上测都通过了,顺便说下,Activex控件,只要在控件测试的那个工具中跑成了就是好的,如果目标机器上出不来就是环境问题,inf是解决环境问题的唯一途径。

虽然微软对ActiveX越来越不信任,但是这个技术还是很多人喜欢用的,这个博客的编辑器貌似就用到了ActiveX。

在我们编写好ocx控件后只有在打包成CAB文件加入数字签名后才能正常发布,如果你用的是vc6,那么问题简单了,打包完成后不用考虑控件的运行库问题,现在的XP系统和将要淘汰的2kpro都已经有了这样的运行库。但是如果使用的是.net2005就会遇到有关运行库的问题,这些问题只能依靠CAB压缩包中的安装文件.inf来解决。

首先看看基本的inf文件格式

ActiveX控件打包cab时INF文件的编写[转]第1张[version]
ActiveX控件打包cab时INF文件的编写[转]第1张
;区域设置
ActiveX控件打包cab时INF文件的编写[转]第1张
signature="$CHICAGO$"
ActiveX控件打包cab时INF文件的编写[转]第1张AdvancedINF
=2.0
ActiveX控件打包cab时INF文件的编写[转]第1张
ActiveX控件打包cab时INF文件的编写[转]第1张
[Add.Code]
ActiveX控件打包cab时INF文件的编写[转]第1张
;该项会指明该安装包中有哪些项,这里说明包中有ActiveX.ocx、msvcr80.dll、mfc80u.dll、msvcp80.dll四个项
ActiveX控件打包cab时INF文件的编写[转]第1张;
这里一般会使用文件名和项名相同的方法,主要是便于维护
ActiveX控件打包cab时INF文件的编写[转]第1张
ActiveX.ocx=ActiveX.ocx
ActiveX控件打包cab时INF文件的编写[转]第1张msvcr80.dll
=msvcr80.dll
ActiveX控件打包cab时INF文件的编写[转]第1张mfc80u.dll
=mfc80u.dll
ActiveX控件打包cab时INF文件的编写[转]第1张msvcp80.dll
=msvcp80.dll
ActiveX控件打包cab时INF文件的编写[转]第1张
ActiveX控件打包cab时INF文件的编写[转]第1张
[ActiveX.ocx]
ActiveX控件打包cab时INF文件的编写[转]第1张
;这就是Activex控件文件了
ActiveX控件打包cab时INF文件的编写[转]第1张
file-win32-x86=thiscab
ActiveX控件打包cab时INF文件的编写[转]第1张
;表示所需要的这个文件就在当前的安装包中,file-win32-x86表示该文件是一个win32系统下的文件
ActiveX控件打包cab时INF文件的编写[转]第1张
clsid={A3B4C60F-24A7-40E8-A06B-1A5EFE5F0A43}
ActiveX控件打包cab时INF文件的编写[转]第1张
;这里是这个安装包的GUID这个值是在创建项目的时候系统生成在,一般存放在以项目名命名的idl文件中,使用项目的类信息的GUID
ActiveX控件打包cab时INF文件的编写[转]第1张
RegisterServer=yes
ActiveX控件打包cab时INF文件的编写[转]第1张
;说明这个控件是需要注册的,
ActiveX控件打包cab时INF文件的编写[转]第1张;
一般情况下只有编写的文件是需要注册的,运行库文件和系统中可能存在的DLL文件是不用注册的,如MFC70.dll等
ActiveX控件打包cab时INF文件的编写[转]第1张
FileVersion=1,0,0,1
ActiveX控件打包cab时INF文件的编写[转]第1张
;这个文件的版本,注意要用逗号隔开
ActiveX控件打包cab时INF文件的编写[转]第1张

ActiveX控件打包cab时INF文件的编写[转]第1张
[msvcr80.dll]
ActiveX控件打包cab时INF文件的编写[转]第1张
;这是ocx控件的第一个依赖文件,有的地方说明依赖文件必须按照依赖顺序安装,可以用"所剩dll都依赖的文件最先安装”的规则来进行,但是我并没有在MSDN上看到什么地方有很明确的说明,并且在我自己的测试中也没有发现有关顺序的问题,并且很多地方都是将ocx控件写在最前面的,但是ocx文件是最依赖其他文件的,貌似按顺序写的做法有点“迷信”
ActiveX控件打包cab时INF文件的编写[转]第1张
FileVersion=8,00,50727,42
ActiveX控件打包cab时INF文件的编写[转]第1张
;这里是该dll文件的版本,这里注意下,这个版本可以在文件属性的版本选项卡中看到,不知道为什么这里显示的版本号有时会比最外面显示的版本号多一个0,注意,复制到inf文件后要将点分隔符改成逗号分隔符
ActiveX控件打包cab时INF文件的编写[转]第1张
hook=mfc80installer
ActiveX控件打包cab时INF文件的编写[转]第1张
;这个hook是个保留字,说明该项目被挂接到哪里,如果有则表示被挂接到目标项,hook不是一个必填项,这里表示该文件将被挂接到mfc80installer项
ActiveX控件打包cab时INF文件的编写[转]第1张

ActiveX控件打包cab时INF文件的编写[转]第1张
[mfc80u.dll]
ActiveX控件打包cab时INF文件的编写[转]第1张FileVersion
=8,00,50727,42
ActiveX控件打包cab时INF文件的编写[转]第1张hook
=mfc80installer
ActiveX控件打包cab时INF文件的编写[转]第1张
ActiveX控件打包cab时INF文件的编写[转]第1张
[msvcp80.dll]
ActiveX控件打包cab时INF文件的编写[转]第1张FileVersion
=8,00,50727,42
ActiveX控件打包cab时INF文件的编写[转]第1张hook
=mfc80installer
ActiveX控件打包cab时INF文件的编写[转]第1张
;上面两项都跟[msvcr80.dll]一样,这里就不解释了
ActiveX控件打包cab时INF文件的编写[转]第1张

ActiveX控件打包cab时INF文件的编写[转]第1张
[mfc80installer]
ActiveX控件打包cab时INF文件的编写[转]第1张
;挂接项
ActiveX控件打包cab时INF文件的编写[转]第1张
file-win32-x86=http://192.168.1.117/helloactivex/mfc80.cab
ActiveX控件打包cab时INF文件的编写[转]第1张
;这里表示这个被挂接的文件的位置在一个地址
ActiveX控件打包cab时INF文件的编写[转]第1张
run=%EXTRACT_DIR%vcredist_x86.exe
ActiveX控件打包cab时INF文件的编写[转]第1张
;这里表示从这个地址下载到cab包后执行包里面的vcredist_x86.exe文件,%EXTRACT_DIR%表示下载后的解压目录
ActiveX控件打包cab时INF文件的编写[转]第1张

ActiveX控件打包cab时INF文件的编写[转]第1张

上面有一点没有说明白,就是“为什么会出现hook这个东西?”,很多的inf文件是这样写的

ActiveX控件打包cab时INF文件的编写[转]第1张[Add.Code]
ActiveX控件打包cab时INF文件的编写[转]第1张msvcr80.dll
=msvcr80.dll
ActiveX控件打包cab时INF文件的编写[转]第1张mfc80u.dll
=mfc80u.dll
ActiveX控件打包cab时INF文件的编写[转]第1张msvcp80.dll
=msvcp80.dll
ActiveX控件打包cab时INF文件的编写[转]第1张ActiveX.ocx
=ActiveX.ocx
ActiveX控件打包cab时INF文件的编写[转]第1张
ActiveX控件打包cab时INF文件的编写[转]第1张
ActiveX控件打包cab时INF文件的编写[转]第1张
[msvcr80.dll]
ActiveX控件打包cab时INF文件的编写[转]第1张file-win32-x86
=thiscab
ActiveX控件打包cab时INF文件的编写[转]第1张
;该文件在当前安装包中
ActiveX控件打包cab时INF文件的编写[转]第1张
FileVersion=8,00,50727,42
ActiveX控件打包cab时INF文件的编写[转]第1张RegisterServer
=no
ActiveX控件打包cab时INF文件的编写[转]第1张
;不需要注册
ActiveX控件打包cab时INF文件的编写[转]第1张
destdir=11
ActiveX控件打包cab时INF文件的编写[转]第1张
;该文件将被安装到系统所在目录的system32下
ActiveX控件打包cab时INF文件的编写[转]第1张

ActiveX控件打包cab时INF文件的编写[转]第1张
;........

我使用这样的方法在没有安装过任何软件的2kpro和XP下测试过,均安装失败,其原因就是运行库不匹配,如果你的控件是用VS2005的MFC开发的话,使用这样的方法无法将msvcr80.dll,mfc80u.dll,msvcp80.dll这几个控件依赖的文件安装到目标位置的,具体是什么原因我也不明白。

这里的hook就是为了解决上面说的问题:要给被按装该控件的机器安装一个运行环境。很多人可能都看过http://support.microsoft.com/kb/167158/这里说明了如何制作一个inf文件,但是很可惜,微软对mfc的下载支持到VC 6.0就结束了,并且,这里还有一个错误,在他的主要示例中有一段

ActiveX控件打包cab时INF文件的编写[转]第1张[mfc42installer]
ActiveX控件打包cab时INF文件的编写[转]第1张file-win32-x86
=VALUE=http://activex.microsoft.com/controls/vc/mfc42.cab
ActiveX控件打包cab时INF文件的编写[转]第1张

上面的“VALUE=”是没有必要的,如果增加了该内容反而会让安装包无法下载。

有了在依赖文件dll的项中有了挂接的hook的值后安装文件会到hook的位置去找需要下载安装的文件,这里我将/Microsoft Visual Studio 8/SDK/v2.0/BootStrapper/Packages/vcredist_x86/vcredist_x86.exe文件做成一个cab文件MFC80.cab,这个包里面只有一个vcredist_x86.exe文件,没有其他文件。

按照上面的方法打包好mfc8的运行库并使用hook的方式将Dll和运行库文件挂接后就可以了。

以上内容在没有安装任何软件的XP和2k pro上测都通过了,顺便说下,Activex控件,只要在控件测试的那个工具中跑成了就是好的,如果目标机器上出不来就是环境问题,inf是解决环境问题的唯一途径。

最后补充一点,上面说的都是在发布Release版本的情况,如果是Debug版本就会少两个库文件“MFC80D.DLL”和“MSVCR80D.DLL”

本博客转载CSDN网友http://blog.csdn.net/immc1979/archive/2007/04/20/1572222.aspx,本人觉得写得非常的实在,一看就是从实际经验中总结出来的,借鉴了,感谢immc1979

免责声明:文章转载自《ActiveX控件打包cab时INF文件的编写[转]》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇当用python读取几十万行文本时,会出现什么状况?跟左神学算法10 经典算法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java调用ocx控件以及dll

http://lvqingboy-163-com.iteye.com/blog/769358 通过Java调用OCX控件有几种方法,JNI、JACOB、Jawin等 1.JNI 最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐。 2.Jawin 尝试了一下,效果不错,但相对来说,其编程风格更贴近Windows,离Java有点远 。 3.Jac...

JS调用Delphi编写的OCX控件

原文:http://www.mamicode.com/info-detail-471283.html 一、使用Delphi XE2编写OCX控件   生成OCX工程:   1、File-New-Other,在New Items对话框中选择Delphi Projects-ActiveX-ActiveX Library   2、File-New-Ot...

如何发布ActiveX 控件

[背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必须进行本地的注册,也就是说用户得首先要把该ActiveX控件(test.ocx)放在本机的%system%/system32下,然后运行DOS工具里面运行regsvr32 test.ocx命令进行注册。但如果真是这么去做的话,那么代表...

.Net魔法堂:史上最全的ActiveX开发教程——ActiveX与JS间交互篇

一、前言                             经过上几篇的学习,现在我们已经掌握了ActiveX的整个开发过程,但要发挥ActiveX的真正威力,必须依靠JS。下面一起来学习吧! 二、JS调用ActiveX方法                     只需在UserControl子类中(即自定义的ActiveX控件中),编写公共方法即可...

读书笔记之《程序员的自我修养链接、装载与库》

从编译,链接到运行,程序员应该了解自己所写的代码最终是怎么成为程序,又怎样在计算机上运行起来的。另不得不对作者能在硕士期间就能写出此书感到佩服。精读此书需要花些功夫,当然肯定能从中收获很多。我对此书也只是泛读,主要是想了解编译,链接及程序在内存中运行整个实现原理。本篇笔记主要记录自己在读此书过程中一些概念上有误解或不清晰的地方。 编译和链接 IDE一般将...

程序安装时注册dsoframer.ocx控件

我使用的是Smart Install Maker打包软件 (1)将dsoframer.ocx控件添加进 (2)添加ActiveX控件 dsoframer.ocx属于ActiveX控件,在ActiveX目录下添加即可 (3)打包 (4)安装,ok!...