目的:
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
的版本,你可以鼠標右擊點出他的屬性對話框,在版本一欄就可以看到了,注意,填寫時,版本號之間的“
.
”號變換為“,”。
posted on 2007-01-08 17:34
我風 閱讀(473)
評論(0) 編輯 收藏 引用