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文件中最下方查找;

p_w_picpath

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文件。


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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章