如何制作.CAB安装包及ini文件中的字段理解

来源:互联网 发布:麒麟网络 编辑:程序博客网 时间:2024/04/29 06:22

 制作cab安装包是一件挺简单的事情,如果大家写的主题或者程序涉及到注册表的修改,建议使用cab安装包来进行安装。首先你需要如下几个文件,CabwizSP.exe,cabwiz.ddf。
好了,下面进入正文,要制作.cab安装包,你只要写一个.inf文件,CabwizSP.exe会根据你的这个INF文件来生成_setup.xml,那么文件要如何写呢?其实很简单,我会提供一个范本,大家只要修改[SourceDisksFiles]之后的字段即可。下面我就来解释一下主要字段的含义。
第一个字段[Version]中Provider大家可以随便改,其他两个参数就不要去碰了。第二个字段[CEStings]的AppName=""就是你为所要安装的程序所起的名字。完整的名字将会是Provider参数的字符串加上AppName参数的字符串,例如范本,最后出现在删除程序中的名字就是“MGCN iMac”。第三个字段[CEDevice.ARM720],CEDevice字段是程序所对应的设备平台,这个大家就不用去管它了,写smartphone的inf文件时候加上这个字段就行了。下面的[SourceDisksNames]是指定源文件所在的磁盘和路径,这里我也搞不太清楚,sdk中的例子也看不懂,我用绝对路径也不行,索性就直接用.代替,反正大家copy就是了(看补充1),这样,大家只要把要打包的文件要和inf放在一起就可以了。下面一个字段[SourceDisksFiles]就是大家要打包的文件清单,后面的=1就表示文件的路径,也就是[SourceDisksNames]中的1。再下一个字段[DefaultInstall]就是安装步骤,范本中CopyFiles参数和AddReg参数表示安装不仅仅是解压拷贝文件,还要修改注册表。CopyFiles=后面跟着是字段名字,即你所要做的拷贝工作到底有哪些。AddReg=作用一样。例如在范本中,CopyFiles=CopyToHomeDir,CopyToiMacDir就是告诉CabwizSP.exe要做两个拷贝文件工作,第一个是把一些文件拷贝到Home文件夹下,要拷贝的文件在[CopyToHomeDir]字段中,第二个是把一些文件拷贝到iMac文件夹下,要拷贝的文件在[CopyToiMacDir]而AddReg=RegData表示安装程序还要修改注册表,修改的东西在[RegData]字段中。下一个字段就是目标文件夹的具体位置。两个参数CopyToHomeDir和CopyToiMacDir要和上个字段的CopyFiles等号右边的两个字符串值分别相同。这里0我也不清楚是什么意思,sdk中找不到,%CE19%就表示/Storage/Application Data(看最后注释),
再下一个字段[CopyToHomeDir]就是具体的任务分配了,引号里面表示解压后的文件名,必须和你压缩前的文件名相同,即必须在[SourceDisksFiles]中能找到相应的文件,后面表示拷贝到相应目录后的文件名,如果没特殊要求就不要改名了。后面一个字段作用和这个相同,我就不多说了,最后是修改注册表段,第一个“,”之前表示注册表中的四大块的名字,直接用缩写就可以了,如范本中HKLM就代表HKEY_LOCAL_MACHINE,其他三个分别为HKCR,HKCU和HKU。第二个“,”之前表示你要修改的键的具体路径(如果没有会自动建立),即完整的项(key)名称,第三个“,”之前就表示你要具体修改的键(就是我们经常在修改注册表的文章中看到的Value Name),如果没有的话程序就会自动建立,第四个“,”之前表示值类型,目前我只懂得整数是0x00010001(见补充2),字符型数据这里你就不要填了,留着个“,”就可以了。最后就是你要填入的Value。例如在范例中HKLM,SOFTWARE/Microsoft/Shell/Rai/:CallAlert,BKBitmapFile,,"/Storage/ApplicationData/Home/iMac/call1.jpg"表示修改(建立)名为BKBitmapFile的键的值,它在HKLM/SOFTWARE/Microsoft/Shell/Rai/:CallAlert下,值内容为/Storage/ApplicationData/Home/iMac/call1.jpg,很明显,这是一个值为String类型的键。整数的我就不说了,范本中有,我相信大家看得懂。
好了,inf文件写好了,copy你要打包的文件和inf文件到含有CabwizSP.exe,cabwiz.ddf的目录中,在命令行模式下输入CabwizSP xx.inf,xx代表你为inf文件起的名字,那么一个带_setup.xml的.cab包就生成完毕了,安装一下,看看自己的成果吧。

注释:%A%表示引用A参数的值,如CopyToHomeDir = 1,%CE1%/%AppName%的话就代表/storage/programfiles/MGCN iMac。(在范例中AppName=Provider+AppName="MGCN"+"iMac"),而对于%CEX%,系统在安装程序时候会自动翻译,如%CE19%翻译结果是/Application Data,又如CE1表示/program files,CE2表示/windows,最后的翻译结果系统会在前面已翻译的结果上再加上默认的storage卷标名(前提是存在默认的storage卷标名),如Smartphone的默认磁盘卷标是Storage,那么%CE19%最终就变成了/Storage/Application Data。有兴趣的可以去翻翻SDK看看到底有多少的%CEX%。
补充1:从modaco的那篇英文文章知道,[SourceDisksNames]包含有四个域,域与域之间用逗号隔开,第一个域是disk_id,磁盘的id(我什么都试过了,这个实在不懂啥意思...大家就表管它意义了。),第二个域是注释,要用""把注释内容包含起来,第三个不知道,第四个是文件路径,“.”就表示当前目录,“..”表示当前目录的上一级目录。
补充2:第四个","之前0x00010001称之为Flag,应该说是对后面value具体类型的表明。几个flag说明如下:
0x00000002如果注册的键(值)存在,则不修改它,不存在的话值就等于最后一个域的内容了(废话...)这个flag可以和下面的任何flag混用(具体怎么混用我也不懂,如果你用这个Flag的话,后面所跟的内容就是string类型了,按理说可以指定后面内容的类型的,不过我试不出来,sdk中也找不到相关说明,估计要去msdn中去找才行...)
0x00000000 表明是String类型,对应注册表中的REG_SZ数据类型。
0x00010000表明是Multi-String类型,对应REG_MULTI_SZ数据类型。就是说包含有很多个字符串,每个字符串用“,”隔开。HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSClog,BKFlags,0x00010000,"xxx","yyy","zzz"
0x00000001二进制类型,对应注册表中的REG_BINARY数据类型,你可以写好几个不同的的二进制,每个二进制数就代表一个域,域与域之间用","隔开,注意不能用0x打头(16进制的头标志)。格式如下:HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSClog,BKFlags,0x00000001,00,01,11,10,11,10
0x00010001表示是整数,对应注册表中的REG_DWORD数据类型。如果数字前面加0x表示十六进制数字,写入注册表时会自动翻译成十进制。如:HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSClog,BKFlags,0x00010001,0x26那么生成_setup.xml时候0x26就变成了38,datatype还是integer。
补充3:[String]字段。这个字段是用来定义你要重复使用的字符串的缩写的,比如你"Software/Microsoft/My TestApp"这个字符串用得很多,你可以用r来代表,只要你在这个字段中写入r = "Software/Microsoft/My Test App"那么再后面字段中你就可以用%r%来表示Software/Microsoft/My TestApp了,例如在注册表字段中你可以这样写HKLM,%r%,test,0x00010001,3,就等同于HKLM,Software/Microsoft/My Test App,test,0x00010001,3     
补充4:关于建立快捷键。形式如下,主要是要在[DefaultInstall],[DestinationDirs]加入相应的项目,并且要建立一个字段,字段名字可以随便取,不过注意三个字段中这个名字都要一样。如:
[DefaultInstall]
CEShortcuts = Shortcuts
[DestinationDirs]
Shortcuts = 0,%CE14%              
[Shortcuts]
Sample App,0,sample.exe              
Sample App,0,sample.exe,%InstallDir%
这里主要是最后一个字段的语法要说明一下,四个域,域之间用逗号隔开,前三个域的内容必须填写。第一个域是快捷键名称,第二个域中0表示是文件,其他任何非零数表示为目录,第三个域就是快捷键的目标程序(目录),第四个域是可选域,是安放快捷键的目录,默认目录就是[DestinationDirs]中Shortcuts = "",你可以指定其他目录,如你想在开始菜单中加入自己的快捷键的话就在这里写上storage/windows/startmenu/。

最后需要说明的是文中的为了方便大家能看清楚,逗号都用全角表示,INF文件涉及系统的东西是不能使用全角符号的,字符串我还没有试过,不过我建议大家能使用英文尽量使用英文....

 

范本1,我自己写的主题iMac的inf文件
[Version]
Signature  = "$Windows NT$"   
Provider  = "MGCN"   
CESignature = "$Windows CE$"   
[CEStrings]
AppName   = "iMac"   

[CEDevice.ARM720]
ProcessorType = 0
[SourceDisksNames]   
1 =.
[SourceDisksFiles]
imac.home.xml    = 1
alert.jpg    = 1
app.jpg    = 1
batterieoff.bmp    = 1
batterieon.bmp    = 1
BatteryMask.gif    = 1
calendar.jpg    = 1
call1.jpg    = 1
call.jpg    = 1
confirm.jpg    = 1
contacts.jpg    = 1
dial.jpg    = 1
dialback.jpg    = 1
error.jpg    = 1
i1.gif    = 1
i2.gif    = 1
i3.gif    = 1
i4.gif    = 1
incall.jpg    = 1
info.jpg    = 1
kbat.ini    = 1
kdh2.jpg    = 1
newhome.jpg    = 1
pro.jpg    = 1
programs.jpg    = 1
sm.jpg    = 1
volume.jpg    = 1

[DefaultInstall]
CopyFiles  = CopyToHomeDir, CopyToiMacDir
AddReg      = RegData
[DestinationDirs]
CopyToHomeDir = 0,%CE19%/Home
CopyToiMacDir = 0,%CE19%/Home/iMac
[CopyToHomeDir]
"iMac.home.xml",iMac.home.xml
[CopyToiMacDir]
"alert.jpg", alert.jpg
"app.jpg", app.jpg
"batterieoff.bmp", batterieoff.bmp
"batterieon.bmp", batterieon.bmp
"BatteryMask.gif", BatteryMask.gif
"calendar.jpg", calendar.jpg
"call1.jpg", call1.jpg
"call.jpg", call.jpg
"confirm.jpg", confirm.jpg
"contacts.jpg", contacts.jpg
"dial.jpg", dial.jpg
"dialback.jpg", dialback.jpg
"error.jpg", error.jpg
"i1.gif", i1.gif
"i2.gif", i2.gif
"i3.gif", i3.gif
"i4.gif", i4.gif
"incall.jpg", incall.jpg
"info.jpg", info.jpg
"kbat.ini", kbat.ini
"kdh2.jpg", kdh2.jpg
"newhome.jpg", newhome.jpg
"pro.jpg", pro.jpg
"programs.jpg", programs.jpg
"sm.jpg", sm.jpg
"volume.jpg", volume.jpg

[RegData]                           
HKLM,SOFTWARE/Microsoft/Shell/Rai/:CallAlert,BKBitmapFile,,"/Storage/Application Data/Home/iMac/call1.jpg"
HKLM,SOFTWARE/Microsoft/Shell/Rai/:ErrorBox,BKBitmapFile,,"/Storage/Application Data/Home/iMac/error.jpg"
HKLM,SOFTWARE/Microsoft/Shell/Rai/:ExclamationBox,BKBitmapFile,,"/Storage/Application Data/Home/iMac/alert.jpg"
HKLM,SOFTWARE/Microsoft/Shell/Rai/:InformationBox,BKBitmapFile,,"/Storage/Application Data/Home/iMac/info.jpg"
HKLM,Software/Microsoft/Shell/Rai/: QuestionBox,BKBitmapFile,,"/Storage/Application Data/Home/iMac/confirm.jpg"
HKLM,SOFTWARE/Microsoft/Shell/Rai/:VolDlg,BKBitmapFile,,"/Storage/Application Data/Home/iMac/volume.jpg"
HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSStart,BKBitmapFile,,"/Storage/Application Data/Home/iMac/programs.jpg"
HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSCPROG,BannerImage,,"/Storage/Application Data/Home/iMac/incall.jpg"
HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSCPROG,BKBitmapFile,,"/Storage/Application Data/Home/iMac/dialback.jpg"
HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSCdial,BannerImage,,"/Storage/Application Data/Home/iMac/dial.jpg"  
HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSClog,BKBitmapFile,,"/Storage/Application Data/Home/iMac/programs.jpg"
HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSClog,BKFlags,0x00010001,26
HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSCONTACTS,BKBitmapFile,,"/Storage/Application Data/Home/iMac/contacts.jpg"
HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSCONTACTS,BKFlags,0x00010001,26
HKLM,SOFTWARE/Microsoft/Shell/Rai/:MSSYNCAPP,BKBitmapFile,,"/Storage/Application Data/Home/iMacX/programs.jpg"
HKCU,ControlPanel/Home,Scheme,,"/Storage/Application Data/Home/iMac.home.xml"
HKCU,ControlPanel/Home,BgImage,,
HKCU,ControlPanel/Home,ColorScheme,,

 

范本2,e200插件的inf文件[Version]
Signature = "$Windows NT$"
Provider = "Orange"
CESignature = "$Windows CE$" [CEStrings]
AppName = "E200's plugin"
[CEDevice.ARM720]
ProcessorType = 0[SourceDisksNames]
1 =. [SourceDisksFiles]
4orangeh.dll = 1
[DefaultInstall]
CopyFiles = CopyToHomeDir
AddReg = RegData[DestinationDirs]
CopyToHomeDir = 1,%CE19%/Home[CopyToHomeDir]
"4orangeh.dll",4orangeh.dll
[RegData]
HKCR,CLSID/{A2536C54-6AC2-4C31-9542-B144B0E9D077}/InprocServer32,,,"/Storage/Application Data/Home/4orangeh.dll"
HKCR,CLSID/{A2536C55-6AC2-4C31-9542-B144B0E9D077}/InprocServer32,,,"/Storage/Application Data/Home/4orangeh.dll"
HKCR,CLSID/{A2536C56-6AC2-4C31-9542-B144B0E9D077}/InprocServer32,,,"/Storage/Application Data/Home/4orangeh.dll"
HKCR,CLSID/{A2536C57-6AC2-4C31-9542-B144B0E9D077}/InprocServer32,,,"/Storage/Application Data/Home/4orangeh.dll"
HKCR,CLSID/{A2536C58-6AC2-4C31-9542-B144B0E9D077}/InprocServer32,,,"/Storage/Application Data/Home/4orangeh.dll"
HKCR,CLSID/{A2536C59-6AC2-4C31-9542-B144B0E9D077}/InprocServer32,,,"/Storage/Application Data/Home/4orangeh.dll"
HKCR,CLSID/{A2536C5B-6AC2-4C31-9542-B144B0E9D077}/InprocServer32,,,"/Storage/Application Data/Home/4orangeh.dll"

 

http://msdn.microsoft.com/en-us/library/aa924371.aspx

http://www.devdiv.net/viewthread.php?tid=1594&extra=page%3D1

原创粉丝点击