生成具有目錄結構的CAB文件

一、使用makecab.exe生成CAB文件

在微軟簽名的過程中有時需要提交.cab格式的文件,該格式是使用微軟的makecab.exe或Cabarc.exe來進行生成的。

這裏主要介紹的是使用makecab.exe來生成cab文件的過程。直接打開一個CMD窗口即可調用makecab命令,但需要確保CMD當前的路徑是處於C盤下的,不然系統會找不到該命令。

使用makecab可將單個的文件壓縮成.cab的格式,但如果當文件的個數超過一個時,就需要一個.txt的文件來將所有需要壓縮的文件全部列出,在該.txt文件中各個需要壓縮的文件可以是以絕對路徑的形式列出,也可以使用相對路徑(此時要保證.txt文件與要壓縮的文件在同一目錄下)。

比如在C:\Users\lishuai\Desktop\abcdefg\submission\目錄下有兩個文件夾package和symbols,其中package文件夾下有如下文件:

symbols文件夾下有如下文件:

因爲需要壓縮的文件多於1個,所以需要建立.txt文件來列出所有需要壓縮的文件。新建的list.txt文件中應該寫入如下內容:

C:\Users\lishuai\Desktop\abcdefg\submission\package\GoodixTouchDriver.inf

C:\Users\lishuai\Desktop\abcdefg\submission\package\GoodixTouchDriver.sys

C:\Users\lishuai\Desktop\abcdefg\submission\package\hidkmdf.sys

C:\Users\lishuai\Desktop\abcdefg\submission\package\kmdfsamples.cat

C:\Users\lishuai\Desktop\abcdefg\submission\package\WdfCoinstaller01011.dll

C:\Users\lishuai\Desktop\abcdefg\submission\symbols\GoodixTouchDriver.pdb

然後使用makecab /f list.txt即可生成.cab文件,該文件將包含上述所有6個文件,但此時需要注意的是這6個文件將同時位於分別位於兩個.cab文件中。

 

如果想將submission文件夾下的package和symbols文件夾下的文件都壓縮到同一個.cab文件中,那麼需要使用以下的命令進行壓縮:

makecab /flist.txt /d compressiontype=mszip /d compressionmemory=21

 /d maxdisksize=1024000000 /d diskdirectorytemplate=dd*

/dcabinetnametemplate=dd*.cab 

此時雖然將6個文件都壓縮到了一個.cab文件中,但此時原有的目錄結構卻消失了,也即原先GoodixTouchDriver.inf等5個文件位於package中,GoodixTouchDriver.pdb位於symbols中,但此時所有這6個文件卻位於了同一個目錄下,也即這樣壓縮後丟失了原有的目錄結構。

 

要想壓縮後還保持原有的目錄結構的話,則需要對使用的list.txt文件進行更改:

.setDestinationDir=package

C:\Users\lishuai\Desktop\abcdefg\submission\package\GoodixTouchDriver.inf

C:\Users\lishuai\Desktop\abcdefg\submission\package\GoodixTouchDriver.sys

C:\Users\lishuai\Desktop\abcdefg\submission\package\hidkmdf.sys

C:\Users\lishuai\Desktop\abcdefg\submission\package\kmdfsamples.cat

C:\Users\lishuai\Desktop\abcdefg\submission\package\WdfCoinstaller01011.dll

.setDestinationDir=symbols

C:\Users\lishuai\Desktop\abcdefg\submission\symbols\GoodixTouchDriver.pdb

這樣之後再運行makecab /f list.txt即可生成具有目錄結構的.cab文件。但此時會出現另一個BUG,即壓縮後的.cab文件在解壓時會出錯,因爲此時生成的.cab文件中package目錄下僅有一個WdfCoinstaller01011.dll文件,而其它4個文件則丟失掉了。

造成這個問題的原因可能是因爲文件大小的問題,因爲文件大小超過了makecab的一個默認界限,所以導致壓縮出錯。解決的方法是使用以下命令進行壓縮:

makecab /flist.txt /d compressiontype=mszip /d compressionmemory=21

 /d maxdisksize=1024000000 /ddiskdirectorytemplate=dd*

/dcabinetnametemplate=dd*.cab 

這樣之後,生成的.cab文件纔是正確的,因爲上述命令中指定了更大的空間,所以可以正確生成.cab文件。具體也可參照以下網址:

http://blog.csdn.net/mirkerson/article/details/5998321

 

二、使用cabarc.exe生成CAB文件

2.1生成具有目錄結構的CAB文件

 先下載cabarc.exe,從http://support.microsoft.com/kb/310618

假設cabarc.exe加壓到D:\temp\11111\BIN\目錄下

 要把D:\vsc_old目錄下的所有文件,包括子文件都添加到cab

 命令如下:

D:\VSC_old>D:\temp\11111\BIN\cabarc-r -p N d:\rr.cab  * 

上述命令中最後的*號一定要注意,必須要加上纔可以

2.2 生成可用於簽名的CAB文件

在CMD中鍵入如下命令後:

CABARC -s6144 N c:\test\lodop.cab c:\test\lodop.ocx

該命令執行完畢後,在C:\test目錄下會看到新生成的Lodop.cab文件。
在這行命令中,CABARC之後有五個參數值,參數之間用空格分隔,
其中 -s 6144 倆參數表示生成的CAB文件以後可以進行代碼簽名

發佈了19 篇原創文章 · 獲贊 16 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章