基于Windows Mobile系统的程序文件CAB安装包原理

2009年08月26日   智能手机   0条评论   3250人围观过  
有许多刚开始使用Windows Mobile智能手机的网友在下载到此类安装文件后不知道怎么使用,有解压缩后看得一头雾水的,也有解压缩后拷贝到手机运行不成功的,平白让大家多走了许多弯路。

还有的网友可能用了相关工具把CAB文件提取出来,可拷贝到手机后还是不能运行,这是为什么呢?到底还差什么步骤啊?同样,大家也非常想知道自己定制ROM时怎样才能把自己需要的软件集成到ROM 。

对于以上这些问题,我们将通过拆解WM5torage手机优盘这个程序的安装文件来获得答案。

首先,解压缩WM5torage.cab文件到WM5torage目录,在该目录下我们会看到一些以数字为扩展名及
_setup.xml文件。用记事本或其他编辑工具打开文件,可查看到如下代码:

[code=xml]




































translation="install" />




[/code]

由上面的代码可以看出,每段代码均以<characteristic>开头,以</characteristic>结束

查看SETUP.XML文件发现路径会用%CE*% (*为1~19数字) 表示,为方便大家理解,下面给出关于%CE*%的对应路径表:
Plam-size PC 和Pocket PC                           Smart Phone
%CE1%          \Program Files                                          \Program Files
%CE2%          \Windows                                                 \Windows
%CE4%          \Windows\启动                                       \Windows\StartUp
%CE5%          \My Documents                                       \My Documents
%CE6%          \Program Files\附件                                 未使用
%CE7%          \Program Files\通信                                 未使用
%CE8%          \Program Files\游戏                                 \Program Files\Games
%CE11%      \Windows\“开始”菜单\程序                     Windows\Start Menu\Programs
%CE12%      \Windows\“开始”菜单\程序\附件                未使用
%CE13%      \Windows\“开始”菜单\程序\通信                未使用
%CE14%      \Windows\“开始”菜单\程序\游戏                \Windows\Start Menu\Programs\Games
%CE15%      \Windows\Fonts                                    \Windows\Fonts
%CE17%      \Windows\“开始”菜单                       &n
bsp;   \Windows\Start Menu
%CE18%      未使用                                                    <Default Volume>
%CE19%      未使用                                                    \Application Data
%InstallDir%    安装目录,但是必须先指定                         安装目录,但是必须先指定

首先,我们先来看第一段代码:
<characteristic type="Install">
<parm name="InstallPhase" value="install" />
<parm name="SetupDLL" value="1" />
<parm name="OSVersionMin" value="5.0" />
<parm name="OSVersionMax" value="5.99" />
<parm name="BuildNumberMin" value="0" />
<parm name="BuildNumberMax" value="-536870912" />
<parm name="AppName" value="Thunder WM5torage" />
<parm name="InstallDir" value="%CE1%\WM5torage" translation="install" />
<parm name="NumDirs" value="2" />
<parm name="NumFiles" value="3" />
<parm name="NumRegKeys" value="1" />
<parm name="NumRegVals" value="16" />
<parm name="NumShortcuts" value="1" />
</characteristic>

本段代码定义了安装类型、OS版本号、应用程序名等。“<parm name="InstallDir" value="%CE1%\WM5torage" translation="install" /> ”定义了安装路径,通过之前对路径的描述可知,安装路径为“\Program Files\WM5torage ”。
<characteristic type="FileOperation">
<characteristic type="%CE1%\WM5torage" translation="install">
<characteristic type="MakeDir" />
<characteristic type="WM5torage.dll" translation="install">
<characteristic type="Extract">
<parm name="Source" value="WM5TOR~1.001" />
</characteristic>
</characteristic>
<characteristic type="WM5torage.exe" translation="install">
<characteristic type="Extract">
<parm name="Source" value="000CAB3F.002" />
<parm name="WarnIfSkip" />
</characteristic>
</characteristic>
<characteristic type="SetupDLL.dll" translation="install">
<characteristic type="Extract">
<parm name="Source" value="SETUPDLL.003" />
<parm name="WarnIfSkip" />
</characteristic>
</characteristic>
</characteristic>

这里将安装包内文件拷贝至安装目录,如“WM5torage.dll ”文件的源文件为安装包内“WM5TOR~1.001 ”文件,“WM5torage.exe ”文件的源文件为安装包内“000CAB3F.002"   ”文件等。
<characteristic type="%CE11%" translation="install">
<characteristic type="MakeDir" />
<characteristic type="WM5torage.lnk" translation="install">
<characteristic type="Shortcut">
<parm name="Source" value="%CE1%\WM5torage\WM5torage.exe" translation="install" />
</characteristic>
</characteristic>
</characteristic>
</characteristic>

此处生成快捷方式,快捷方式目标为“%CE1%\WM5torage\WM5torage.exe ”。
<characteristic type="Registry">
<characteristic type="HKLM\Drivers\USB\FunctionDrivers\WM5torage_Class">
<parm name="ActivateFlags" value="0" datatype="integer" />
<parm name="DeviceName" value="DSK1:" datatype="string" />
<parm name="NLEDWrite" value="65535" datatype="integer" />
<parm name="NLEDRead" value="65535" datatype="integer" />
<parm name="idVendor" value="1118" datatype="integer" />
<parm name="ReadOnly" value="0" datatype="integer" />
<parm name="InterfaceSubClass" value="6" datatype="integer" />
<parm name="FriendlyName" value="WM5torage Mass Storage" datatype="string" />
<parm name="bcdDevice" value="0" datatype="integer" />
<parm name="Manufacturer" value="Microsoft" datatype="string" />
<parm name="Product" value="Windows Mobile Device" datatype="string" />
<parm name="Removable" value="1" datatype="integer" />
<parm name="LastClient" value="RNDIS" datatype="string" />
<parm name="Dll" value="%CE1%\WM5torage\WM5torage.dll" datatype="string"
translation="install" />
<parm name="InterfaceProtocol" value="80" datatype="integer" />
<parm name="idProduct" value="65535" datatype="integer" />
</characteristic>
</characteristic>

本段代码告诉安装程序需要在注册表相关位置添加相应键值。非常重要,这就是有些时候采用工具提取了相关文件拷贝至手机并不能运行的原因,因为还需要在注册表添加键值。

对于定制ROM集成软件来说,可以安装上面的setup.xml文件修改文件发放表和添加注册表键值。
关键字: CAB,Windows Mobile

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。