這是一種最常見的部署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就是我自己生成的證書。如何生成證書和安裝證書請看我另外一篇文章。