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

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

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

[version]
;区域设置
signature="$CHICAGO$"
AdvancedINF=2.0 

[Add.Code]
;该项会指明该安装包中有哪些项,这里说明包中有ActiveX.ocx、msvcr80.dll、mfc80u.dll、msvcp80.dll 四个项
;这里一般会使用文件名和项名相同的方法,主要是便于维护
ActiveX.ocx=ActiveX.ocx
msvcr80.dll=msvcr80.dll
mfc80u.dll=mfc80u.dll
msvcp80.dll=msvcp80.dll

[ActiveX.ocx]
;这就是Activex控件文件了
file-win32-x86=thiscab 
;表示所需要的这个文件就在当前的安装包中,file-win32-x86表示该文件是一个win32系统下的文件
clsid={A3B4C60F-24A7-40E8-A06B-1A5EFE5F0A43}
;这里是这个安装包的GUID这个值是在创建项目的时候系统生成在,一般存放在以项目名命名的idl文件中,使用项目的类信息的GUID
RegisterServer=yes
;说明这个控件是需要注册的,
;一般情况下只有编写的文件是需要注册的,运行库文件和系统中可能存在的DLL文件是不用注册的,如MFC70.dll等
FileVersion=1,0,0,1
;这个文件的版本,注意要用逗号隔开

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

[mfc80u.dll]
FileVersion=8,00,50727,42
hook=mfc80installer
 
[msvcp80.dll]
FileVersion=8,00,50727,42
hook=mfc80installer
;上面两项都跟[msvcr80.dll]一样,这里就不解释了

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

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

[Add.Code]
msvcr80.dll=msvcr80.dll
mfc80u.dll=mfc80u.dll
msvcp80.dll=msvcp80.dll
ActiveX.ocx=ActiveX.ocx


[msvcr80.dll]
file-win32-x86=thiscab
;该文件在当前安装包中
FileVersion=8,00,50727,42
RegisterServer=no 
;不需要注册
destdir=11
;该文件将被安装到系统所在目录的system32下

;........

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

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

[mfc42installer]
   file-win32-x86=VALUE=http://activex.microsoft.com/controls/vc/mfc42.cab

上面的“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

转载于:https://www.cnblogs.com/matoo/archive/2011/09/20/2182324.html

ActiveX控件打包cab时INF文件的编写[转]相关推荐

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

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

  2. ActiveX控件打包、签名、嵌入详解

    ActiveX控件打包.签名.嵌入详解 前言 在我们的一个项目中,使用到了大华网络监控摄像头枪机,网络上下载了其ActiveX插件,但是发现其所提供的类库没有打包处理.这就导致我们每次给用户安装的时候 ...

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

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

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

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

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

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

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

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

  7. 为ActiveX控件创建Cab文件

    为ActiveX空间添加Cab文件 目的: 1.  依赖MFC库或ATL库等开发的ActiveX控件要正常的运行必须依赖这些库.但是你不能保证你用户的机器上装有与你开发环境相同的库,所以,当你发行一个 ...

  8. VS2005下MFC开发的ActiveX控件的部分总结 inf 篇

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

  9. ActiveX 控件打包

    网上有很多进行控件打包和签名的步骤,不过很遗憾的是他们发布的控件大多以VB进行的开发,可以直接使用VC6的package & deployment wizard对控件进行打包.我这里的开发的控 ...

最新文章

  1. mysql 绿色版远程访问_【Linux】MySQL解压版安装及允许远程访问
  2. a类不确定度计算器_统统帮您搞定:LIMS系统,换版、内审、期间核查、不确定度、数据分析…………...
  3. solr索引服务器的配置和solrj集成开发总结
  4. APK Expansion Files / Obb 接入介绍
  5. 结构体指针struct stu *p;和结构体变量struct stu p;结构体为什么要用指针引用而不用变量引用
  6. QT的QTextLayout类的使用
  7. A strange lift HDU - 1548(基础广搜)
  8. leetcode603. 连续空余座位(SQL)
  9. 20170124L07-03-01老男孩linux运维实战培训-生产环境大于254台机器网段划分及路由解决方案案例...
  10. Kubernetes 证书过期
  11. 牛客题霸-SQL篇——10~20题
  12. linux 修改时间 date
  13. CGAL DEMO 演示
  14. 基于python+django框架+Mysql数据库的电影院售票选座系统设计与实现
  15. php用pkcs1还是pkcs8,PKCS1与PKCS8的小知识
  16. 计算机网络原理最详细解说
  17. 万字拆解欧莱雅:百年美妆帝国的数字化远征
  18. Word - 简繁转换功能
  19. Rationla Rose
  20. 面试官问“为什么应聘这个岗位”,应该如何回答?

热门文章

  1. NUC970(ARM9)裸机SPI驱动
  2. 论文解读 | LGD:用于物体检测的标签引导自蒸馏
  3. 游泳过后,耳朵进水怎么办,中耳进水
  4. UE4后期处理材质:扁平化风格描边
  5. VMware Workstation 12Pro安装步骤
  6. matplotlib 进阶之Artist tutorial(如何操作Atrist和定制)
  7. 康耐视智能相机入门笔记
  8. 芯片的英文手册需要全部看吗?
  9. 博动医疗冲刺港股:9个月亏2亿 高瓴与飞利浦是股东
  10. 视频会议软件Zoom隐私安全问题大爆发