使用Cab包部署ActiveX控件

這是一種最常見的部署ActiveX控件的方式。在MSDN –> Vsiual Studio文檔 –> Visual C++文檔 –> 參考信息 –> 庫參考信息 –> MFC –> Concepts –> MFC Internet Programming Task –> Creating Signed CAB Files For MFC –> Creating a CAB File 中有詳細描述。

簡單的來說就是下載CabSDK,裏面有cabarc等工具,然後創建INF文件,然後用cabarc創建cab文件。最後對cab簽名。

1、CabSDK可以在MSDN下載。

2、INF文件的參數和結構 在MSDN –> Web開發 –> Internet Explorer Development –> Content Extenstions –> Content and Component Delivery –> Internet Component Download –> Overviews/Tutorials –> About INF File Architecture 和 Using INF Files中有很詳細的描述。

麻煩的是,INF中的目標位置只能是%windir%或者是%windir%/system。不可能是其他的目錄,而且加入其它的操作也是一件相對比較複雜的事情。

好在有一個Setup Hooks的機制可以插入執行命令。可以執行任何命令,包括bat,這樣就可以把所有的安裝操作都寫成bat。美中不足的是,安裝的時候會有黑色的DOS窗口彈出來,怎麼嘗試都不能隱藏掉。所以我乾脆寫了一個Windows小程序,這個小程序是不顯示自己的視窗的,同時根據傳入的參數,在後臺打開一個進程執行bat文件。配置如下: 
[version] 
signature="$CHICAGO$" 
AdvancedINF=2.0 

[Setup Hooks] 
hook1=hook1 
[hook1] 
run=%EXTRACT_DIR%/shell.exe %EXTRACT_DIR%/setup.bat %EXTRACT_DIR%

%EXTRACT_DIR%是Cab臨時解壓目錄,shell.exe是我寫的隱藏窗體的後臺進程啓動外殼。setup.bat是安裝控件的腳本,爲了讓腳本能夠得到解壓的目錄,把%EXTRACT_DIR%作爲參數傳遞進去。腳本里面就可以做各種通用操作了。調試的時候可以用這種命令 
run=%EXTRACT_DIR%/shell.exe %EXTRACT_DIR%/setup.bat %EXTRACT_DIR% > c:/debug.txt

 

3、接下來就是使用cabarc命令創建cab文件和簽名。我喜歡使用批處理命令,因爲cab裏面文件較多,寫在批處理命令裏面很不方便。所以我一般都把需要打包的文件寫入filelist,然後把打包命令寫成批處理文件。比如

打包批處理 build.bat 
set PATH=E:/mssdk/mscabsdk/BIN;%PATH% 
cabarc N Release/MSF.cab @cabfilelist.txt 
signcode -v view.pvk -spc view.spc Release/sel.CAB

cabfilelist.txt裏面就直接列出需要打包的文件即可,一行一個文件。包括依賴的庫文件,inf文件,安裝腳本和執行外殼shell.exe。這是我其中一個項目的文件: 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.CRT/msvcm90.dll 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.CRT/msvcp90.dll 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.CRT/msvcr90.dll 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFC/Microsoft.VC90.MFC.manifest 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFC/mfc90.dll 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFC/mfc90u.dll 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFC/mfcm90.dll 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFC/mfcm90u.dll 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFCLOC/Microsoft.VC90.MFCLOC.manifest 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFCLOC/MFC90CHS.dll 
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFCLOC/MFC90ENU.dll 
sel.inf 
setup.bat 
../release/sel.ocx 
../release/shell.exe

沒有經過數字證書籤名的控件是會被安全攔截的。所以簽名十分必要。打包腳本的最後一步就是簽名。view.pvk和view.spc就是我自己生成的證書。如何生成證書和安裝證書請看我另外一篇文章。

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