梦书之家(移动开发)

你有一个苹果,我有一个苹果,我们交换一下,一人还是一个苹果;你有一个思想,我有一个思想,我们交换一下,一人就有两个思想。 ——肖伯纳

导航

Windows Mobile 上的注册表导入与导出及Smart Device CAB Project的妙用

     虽然,我们可以在.inf文件中操作注册表(在VS 2005中,我们只要在Smart CAB Project 中添加注册表操作即可),但是有时候,如:机器上空间有限,因为CAB文件需要占用空间,如果我们采用将安装程序要用到的文件直接拷到相应的目录下,然后修改注册表,这样就可以节省CAB所需要的空间,特别是针对空间刚好只够存放一个应用程序的时候;还有就是OEM产生将软件ROM的时候,这些情况下我们需要手动操作注册表,这个时候,我们需要自己写注册表文件。用google搜索肯定能搜索到关于如何编写注册表的一系列文章。但是,我们可以通过Windows Mobile的远程工具来获得注册表文件,无须自己编写(就算要自己写,也只要修改一些参数)。
      以下的内容,是在Windows Mobile 5.0 for Pocket PC的(中文版)模拟器上做试验。
      导出注册表文件
      以导出PPC里的一个应用程序Hanwang的注册表为例子,首先,用ActiveSyn 4.X 同步上PPC模拟器(如果只是导出注册表的话,可以不同步,只要打开模拟器即可);其次,利用Windows Mobile 的Remote Tools(在vs 2005下,叫做 Visual Stidio Remote Tools,可在"开始"->"所有程序->"Microsoft Visual Studio 2005"->"Visual Studio Remote Tools"找到)下的Remote Registry Editor,连接上打开的模拟器。接着,找到Hanwang的在注册表中的目录(在 HKEY_LOCAL_MACHINE\Software\Hanwang),鼠标点击下"Hanwang",然后,点击Remote Registry Editor工具栏上的"Registry" ->"Export Registry Files…",然后给导出的文件命名并选择保存文件路径,点击"保存",即可导出文件。
     注意:如果注册表中包含中文的话,就无法导出中文,可能就是一个逗号(,)。
       文件(需要把扩展名改为reg)的内容如下:
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\HanWang]

[HKEY_LOCAL_MACHINE\Software\HanWang\HangWang Pen for WinCE]
"Study"="0"
"Sound on"="1"
"Screen segment"="1"
"Default input panel"="0"
"Ink speed"="10"
"Ink width"="1"
"Ink color"="0"
"Ink type"="2"
"Recognizer delay"="400"
"Recognizer range"="600E"
       为了检验,你需要对以上的文件目录进行修改,以示与原来的注册表项区别开。
这个注册表文件的程序,有可能不全,对于这个Hanwang程序来说。有兴趣的可以自己去慢慢研究。
      导入注册表文件
      如果我们直接将以上导出的注册表文件,放到PPC,双击该文件,运行。这个操作在PC上,是没有任何问题的。但是,在PPC会出现如下图所示的错误:
                         
      原来,“在Windows Mobile上,默认没有regiedit这样的程序关联,不可以自动导入”。所有,只能通过别的方式导入。
      奇怪的是,按理说Remote Registry Editor应该有导入注册表文件的功能啊,但是我在Remote Registry Editor没有找到相应的按钮操作(当然逐项、逐键、逐值建立除外),如果您知道,麻烦告知。
      我选择的方法是:通过创建Smart CAB Project来将注册表文件导入。
      在Visual Studio 2005 下,依次选择 "New " ->"Project"->"Other Project Types"->"Setup and Deployment"->"Smart Device CAB Projects",输入文件名以及选择路径,单击"OK",这样就建好了工程。接着,单击在ide里打开的工程上方的绿色图标的Registry Editor,在IDE的右边就会出现Registry On Target Machine以及包含注册表常用的4个目录,右击右边的绿色图标"Registry Editor"->" Import",将上面导出的文件,导入。
      因为,这个工程里面有任何文件,所以,在"Build"的时候,会出现如下的错误:
ERROR: You tried to build a setup project but did not include any files.  You must specify at least one file before continuing.
这时候,你可以随便往工程里添加一个文件(右击工程名,Add->File,添加文件或者点击工程名上的File system Editor来进行相应的操作)。
     添加文件后,"Rebuild",生成CAB文件,而且你可以在Release文件夹下找到,inf文件。
inf文件中关于注册表的语句如下:
[RegKeys]
"HKLM","Software\HanWang\HangWang Pen for WinCE","Ink color","0x00000000","0"
"HKLM","Software\HanWang\HangWang Pen for WinCE","Sound on","0x00000000","1"
"HKLM","Software\HanWang\HangWang Pen for WinCE","Default input panel","0x00000000","0"
"HKLM","Software\HanWang\HangWang Pen for WinCE","Ink width","0x00000000","1"
"HKLM","Software\HanWang\HangWang Pen for WinCE","Ink type","0x00000000","2"
"HKLM","Software\HanWang\HangWang Pen for WinCE","Recognizer range","0x00000000","600E"
"HKLM","Software\HanWang\HangWang Pen for WinCE","Ink speed","0x00000000","10"
"HKLM","Software\HanWang\HangWang Pen for WinCE","Study","0x00000000","0"
"HKLM","Software\HanWang\HangWang Pen for WinCE","Recognizer delay","0x00000000","400"
"HKLM","Software\HanWang\HangWang Pen for WinCE","Screen segment","0x00000000","1"
      这样,你就可以将inf文件的注册表语句语法与reg文件的语法进行对比。可以发现,inf文件中的0x00000000表示健值是字符串类型,而0x00010001是dword类型,但是奇怪的是0x00000002类型,从注册表中导出后,再生成INF文件的时候,却变成了0x00000000类型,估计0x00000002也是一种字符串类型,但是0x0000000与0x00000002这两种类型有什么区别呢?有高人知道么?
      最后,你可以将CAB文件拷到模拟器上,运行安装,这样,你就可以看看你修改或者写的注册表是否正确。由于这个是采用CAB文件安装上去的,可以通过删除程序将其删除,所以,达不到ROM里程序的要求,但以上方法,可以作为检验reg文件是否正确以及inf文件中的[RegKeys]段与reg文件的转换的方法。
    在实际的工程中,更为常见的是,先产生应用文件的CAB文件,将CAB文件安装到Windows Mobile上后,再通过Remote  Registry Editor将应用程序的注册表项导出。甚至,再按照如上的方式,再建个Smart Device CAB Project工程,安装到Windows Mobile上,以进行检验。但是,往往最后这个检验过程,没有必要。

posted on 2006-08-26 10:08  梦书  阅读(10083)  评论(3编辑  收藏  举报