C++浏览器插件ActiveX开发(三)

ActiveX插件如果想在Html中进行引用,必须先对插件ocx文件进行注册,即通过regsvr32将该控件注册到用户的操作系统里。在实际应用中,一般有两种方式来达到这个目的: 

一、通过安装程序注册ActiveX

      这种方式非常直观,就是制作一个简单的安装程序,该安装程序的任务就是将打包的ocx文件及其依赖文件解压复制到系统目标位置,然后再通过执行regsvr32命令将已复制到用户机器目标位置的ocx文件注册到系统中。当web页面中需要调用相应的ActiveX时,将在显著位置提示用户需下载指定的程序并运行安装。

       实际很多应用程序在安装时都隐含地向系统注册了一些ActiveX的,例如QQ、飞信、播放器等,这样相应的web就更加灵活。不过,并不是所有的ActiveX插件都是以ocx文件呈现的,也可以是dll文件。

 

二、通过cab包由IE自动注册

       能否在web页面需要引用ActiveX时由IE自动下载对应的插件并自动安装呢?当然可以。我们要做的就是要将ocx及其他文件打包成一个cab文件,然后将该cab文件放在web服务器上,并在web页面中通过<object …..  codebase=”xxx.cab#version=1,0,0,1” />的方式进行调用。

       cab实际上是微软规定的一个特殊格式的压缩文件,制作cab包过程很简单:

       1、 准备cabarc.exe工具,该工具可以在这里下载,也可以从微软下载;

       2、 将ocx文件及依赖的其他文件放到同一个目录下,并在该目录下创建一个后缀为.inf的文件(文件名可任意取,一般与ocx文件同名,例如MyTestActiveX.inf),文件内容如下:

复制代码
[version]    signature="$CHICAGO$"    AdvancedINF=2.0      [Add.Code]    MyTestActiveX.ocx=MyTestActiveX.ocxmwhrf_bj.dll = mwhrf_bj.dll  [MyTestActiveX.ocx]    file=thiscab    clsid={1345C26B-E979-45A5-997D-9427FB81E707}   FileVersion=1,0,0,1    RegisterServer=yes    DestDir=11 [mwhrf_bj.dll]    file=thiscabFileVersion=1,0,0,0DestDir=10
复制代码

      a) signature="$CHICAGO$"表示这个.INF文件和Windows95或其后版本和Windows NT 4.0或其后的版本兼容。

      b) [Add.Code]下面的内容用于定义该cab需要下载的各文件对应的定义区块,左边为文件名,等号右边为定义区域名,一般为易读均将定义的区域名与文件名相同。

      c) 各文件的定义区域分别定义了该文件的各种属性:

file:表示该文件的获取位置,此处thiscab表示该文件就包含在该cab中;如果在其他位置而不在cab包中,则可以写上具体的位置如http://xxx.xxx.xxx/xx/mwhrf_bj.dll

clsid: 只有需要注册的ocx文件才设置这个属性,他的值就是改ocx的唯一classid,可以从项目的.idl文件中最下方查找;

image

FileVersion:文件版本号。一般将ocx文件的版本号视同为整个cab的版本号,在<object codebase=”xx.cab#version=1,0,0,1”中将用到该版本号

DestDir:该文件需要COPY到目标机器的位置,11表示system32目录下,10表示windows目录下,……

 

         有关inf文件的具体内容可参考以下文章相关部分,已经非常详细了:

OCX控件CAB打包手册及升级方法

INF文件的语法解说

创建 CAB 文件

VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

:如果考虑到终端用户的权限以及将ActiveX注册到什么位置(Current User或Machine),可参考

Non-Admin ActiveX Controls

 

       3、运行如下命令进行打包:

cabarc" -s 6144 N "xxxxxx.cab" "xxxxx.ocx" "mwhrf_bj.dll" "xxxxxx.inf"

      其中凡是需要打包的文件均要一一列出,inf文件放在最后(未测试是否必须最后)。文件路径均可以是绝对路径或相对路径,不一定非得是相同文件夹下。

       命令执行后将自动生成.cab文件。


=======================================================================

 

你可能感兴趣的:(C++,浏览器,web服务器,应用程序,浏览器插件,ActiveX开发)