1、如果需要建立cab檔案,首先需要Cabarc或者Makecab,它們随着Cabinet SDK的安裝就有了,Cabinet SDK的下載下傳位址是http://msdn.microsoft.com/workshop/management/cab/cabdl.asp。
Cabarc可以建立、檢視或者解出cab裡面的檔案,而Makecab則隻可以用來建立cab檔案。
2、制作cab檔案時需要将所有的相關檔案都包含進去,可以通過Depends(VC自帶的)檢查需要的檔案。使用inf檔案将這些東西都寫進去。
3、inf搞法:inf檔案描述cab中所有的ocx及dll檔案,inf通過一些命名區域來提供需要的資訊。
怎麼寫inf
最開始一般是[Version]區:
eg: [Version]
signature="$XXXX$"
AdvancedINF=2.0
接下來就是最重要的[Add.Code]區:
eg: [Add.Code]
Ctrl1.dll=C1Section
Ctrl2.dll=Ctrl2.dll
前面是要下載下傳的檔案名,後面是對應這個檔案的區域名,可以是任何名字,不過一般都是和檔案的名字相同,這樣友善維護。還有需要注意是在[Add.Code]區出現的檔案要根據依賴性進行排序,例如前面說的ctrl1.dll要依賴于ctrl2.dll,則ctrl2.dll要出現在ctrl1.dll的前面。因為安裝時是按照相反的順序進行的,也就是說先安裝ctrl2.dll,然後才是ctrl1.dll,哧哧,記清楚了,不要搞反了。
再接下來是各個檔案的區域了
[Ctrl1.dll]
file-win32-x86=thiscab
RegisterServer=yes
clsid={.....}
DestDir=
FileVersion=1,0,0,0
[Ctrl1.dll]區域中的第一個file值告訴ie到哪裡去得到這個dll,file一共包括三個部分,第一部分是file,這個永遠都是這樣的(至少目前來說);第二部分告訴聲明支援的OS,win32表示windows,mac就是蘋果MAC OX了;第三部分是CPU類型,比如說x86、 ppc (Power PC)、 mips或者alpha了。
file的值可以取三個一個URL、ignore和thiscab,如果是URL則說明到URL所在的位置去下;如果是ignore說明對于這種OS和CPU,不需要下載下傳這個檔案(ctrl1.dll);如果是thiscab很明顯就在目前的cab檔案中了。
接下來是RegisterServer,可以取兩個值yes和no,如果為yes則說明ie要注冊該dll,如果是no就不必了;
再下來是DestDir,它的值是dll将要存到本地硬碟的位置,如果它的值是10,則将dll放到\Windows或者\WinNT下;如果是11,則放到\Windows\System或者
\WinNT\System32下;如果是空(就是沒有值)則會放到\Windows或者\WinNT下的Downloaded Program Files目錄下;
最後是FileVersion,這個就比較明顯了,說明了ctrl1.dll的版本号。
有時候我們使用VB來開發控件的時候,需要将VB的虛拟機裝上去,它需要一些其它的說明的,簡單地講一下吧:
在[Add.Code]中增加一項MSVBVM60.DLL=MSVBVM60.DLL(以VB6為例)下面是
MSVBVM60.DLL區域:
[MSVBVM60.DLL]
hook=MSVBVM60.cab_Installer
FileVersion=6,0,81,76
FileVersion很明顯,是版本号,就不再說發,就說說hook吧。
hook區域是在安裝的時候需要執行的區域,它分為兩種,一種是有條件的,另外一種是無條件的,無條件的hook區域是必須執行的,反之則根據條件判斷是否執行。以[Setup Hooks]标記的區域是無條件區域,如下所示
[Setup Hooks]
hookname=section-name
[section-name]
run=%EXTRACT_DIR%\setup.exe
無條件區域常用來通過一個inf檔案執行一個安裝程式,這就是我們在資料總管右鍵點選一個inf檔案時在執行安裝這樣的菜單的原因了
當ie下載下傳了一個cab檔案,如果檔案中沒有[Add.Code],則處理[Setup Hooks]區域,運作run所指定程式,哧哧,上面就是setup.exe;
條件區域則為在一定條件下執行,前面為MSVBVM60.DLL指定的hook區域就是一個條件區域,如果在MSVBVM60.DLL指定的CLSID或者version不能滿足需要而且沒有file這個命名值,則執行hook所指定的區域。
[MSVBVM60.cab_Installer]
file-win32-x86=http://activex.microsoft.com/controls/vb6/VBRun60.cab
run=%EXTRACT_DIR%\VBRun60.exe
上面[MSVBVM60.cab_Installer]是一個hook區域,它也包含了一個file值,指定一個URL,表示MSVBVM60.DLL可以從這個URL下載下傳得到;run則說明了執行哪一個檔案
這裡有必要說明一下的是,MS對一些常用的Redistributable Microsoft DLLs
可以通過指定CODEBASE屬性為http://activex.microsoft.com/controls,這樣在cab檔案中就中需要包含這些檔案,在計算機上有一個檔案redist.txt上面的dll就是Redistributable Microsoft DLLs
建立一個cab檔案:
cabarc N ctrl1.cab ctrl1.inf ctrl1.dll
N表示要建立一個新的檔案,ctrl1.cab是建立的檔案名,ctrl1.inf是cab的inf,後而是需要加到cab裡的檔案,可以使用通配符。
然後就可以将cab檔案放到網頁上了
<OBJECT ID="Ctrl1Obj"
CLASSID="clsid:....................................."
CODEBASE="http://server.com/ctrl1.cab#version=8,0,0,5007">
</OBJECT>
這裡也在一個version,不過這裡的version是指控件的version,而inf裡的是檔案的version。
制作電子簽名:
首先從下面的網址下載下傳制作簽名的工具SignCode,位址是
http://msdn.microsoft.com/workshop/gallery/tools/authenticode/authcode.asp
從簽名授權中心如VeriSign或者你的區域網路上運作的Microsoft Certificate
Server授權伺服器得到一個certificate,在申請授權的過程你會得到一個私鑰。
也可以使用MakeCert.exe和Cert2Spc.exe建立的私鑰進行測試,方法是首先使用MakeCert建立一個X.509的certificate(.cer檔案)
MakeCert -sv MyKey.pvk n "CN=My Software Company" MyCert.cer
然後利用Cert2Spc将.cer檔案轉換成為PKCS #7軟體釋出Certificate(.spc檔案),
Cert2Spc MyCert.cer MyCert.spc
利用你下載下傳的SignCode對你的cab檔案進行電子簽名
SignCode -spc MyCert.spc -v MyKey.pvk -t http://
timestamp.verisign.com/scripts/timstamp.dll ctrl1.cab
SignCode還可以指定一些其它的參數,就不說了,太長了,哧哧。
雖然可以利用測試的.cer和.spc檔案,但是在釋出的時候,必須申請。