一、使用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文件以后可以进行代码签名。