[整理]WinCE下直接启动自己应用程序的方法

 

如何添加自己的应用程序到WINCE内核中,并且随系统启动而启动

http://blog.csdn.net/malk_zdh/archive/2007/10/29/1853851.aspx

 

 

 

方法一:

假设你的程序是MyApp.exe,并且同样假定你的平台已经具有NK.bin(如果没有,那么需要编译PB,然后生成NK.bin,这个方式参考WICNE操作步骤)
1.将MyApp.exe复制到..WINCE420PUBLICSMDK2410RelDirSAMSUNGRelease目录下;


2.修改project.bib文件,在FILES Section添加

 

FILES
;  Name            Path                                           Memory Type
;  --------------  ---------------------------------------------  -----------

   MyApp.exe      $(_FLATRELEASEDIR)/MyApp.exe                     NK     S

 

 

3.创建快捷方式文件MyApp.lnk(文本文件),文件内容如下: 18#/Windows/MyApp.exe  【18为#之后的字符串长度】

MyApp.lnk文件也放入..WINCE420PUBLICSMDK2410RelDirSAMSUNGRelease目录下

 

4.修改project.bib文件,在FILES Section添加
FILES
;  Name            Path                                           Memory Type

;  --------------  ---------------------------------------------  -----------

MyApp.lnk           $(_FLATRELEASEDIR)MyApp.lnk                    NK    S

 

【MyApp.exe、MyApp.lnk将被拷贝至 Image 的 /Windows 目录,文件属性为系统文件】

 

 

5.修改 project.dat 文件,添加如下内容: Directory("/Windows/Startup"):-File("MyApp.lnk","/Windows/MyApp.lnk")

 

6.Platform Builder IDE->菜单Build->MakeImage(记得千万不要Build或者Rebuild,否则你就要重新来一遍)到此得到的NK.bin就包含了应用程序MyApp.exe和MyApp.lnk,并且MyApp程序会在系统启动时自动运行。

 

说明:

 

   I.  将自定义的文件打包进NK.bin中的方法有两种:

     第一种是编辑project.bib文件。在FILES Section描述文件的名称,源文件的路径,文件在目标系统中的属性。在上面, MyApp.exe $(_FLATRELEASEDIR)/MyApp.exe  NK  H 表示将E:ProjectMyWinCERelDirCEPC_X86Release 目录下的文件MyApp.exe文件打包进NK.bin,并且此文件将处在Kernel内存区,文件属性类型为隐藏【H为隐藏,S为系统文件】。

   第二种方法是添加User Feature。PlatformBuilder IDE->FeatureView->在"MyWinCE Features"上Right Click鼠标->Insert User Feature->指向想打包的文件。【此方法,未验证】

 

无论采用哪种打包方法,在启动的Windows CE系统中,文件都在Windows目录下。下一步就是根据需要重新组织文件系统的目录结构。

 

   II.  组织文件系统的目录结构的途径在于修改project.dat文件,添加文件目录结构的描述。描述的语法如下:root:-Directory("<目录名>") 表示在root目录()下创建目录;   Directory("<目录名>"):-Directory("<子目录名>") 表示在指定目录下创建子目录;   Directory("("<目录名><子目录名>"):-File("<文件名>.<扩展名>","Windows<文件名>.<扩展名>") 表示在指定目录下创建Windows目录下文件的拷贝,显示名称是<文件名>.<扩展名>

 

  root:-Directory("/Windows")   【已创建,一般不需创建此目录】

  Directory("/Windows"):-Directory("Coursing")   【Windows 目录下创建子目录Coursing】

  Directory("/Windows/Startup"):-File("Tutorial_03.lnk","/Windows/Tutorial_03.lnk")  【在/windows/Startup目录下,创建/Windows/Tutorial_03.lnk 的拷贝;机器启动后,启动 lnk 文件所指向的文件】

 

 

 

 

方法二:

其实让一个程序在wince里启动和windows里差不多,直接设置其为启动项,这个有几个方法。一个就是制作一个快捷方式,指向我们的应用程序如app.exe,然后将快捷方式放到/windows/startup下面。

    步骤如下:(假设app.exe已经拷贝到windows下面【参见方法一】) 

 

    1.  在pb中创建一个文件,文件类型选txt,然后命名为.lnk后缀,假设名字为test.lnk 

 

    2.  编辑其内容为: 16#/windows/app.exe。备注:前面的16是# 后面所有字符的总和,包括空格。Wince的帮助文档上说这么定义就行,但是我尝试后,最后down到目标机上面时提示找不到文件,在wince里查看这 么创建的test.lnk的属性,发现其指向/windows/app.exe后面还有两个方框,因此不对,我的解决方法是修改test.lnk的内容为 16#"/Windows/app.exe" 

 

    3.  编辑好lnk文件内容后,在pb中修改 project.bib。在files段后面添加下面一行:(和添加别的文件到image中类似,见我的《WinCE 中如何向image中添加文件》,也要在pb的flatform菜单的setting下添加build语句,不再赘述)

        test.lnk $(_FLATRELEASEDIR)/test.lnk NK S

 

    在project.dat中增加下面一行:

         Directory("/Windows/startup"):-File("test.lnk","/Windows/test.lnk")

 

    这样后系统启动后就会自动启动我们的程序了。【此部分内容与方法一相同】

 

 

     方法三: 是编辑注册表:在project.reg中添加如下内容

 

        [HKEY_LOCAL_MACHINE/init]

        "Launch80"="app.exe"

        "Depend80"=hex:14,00,1e,00

 

    这个是设定启动顺序,launch后面的数字越大的越是后启动,Depend80后面的指定依赖项,为16进制,上面的语句表明依赖项为launch20 【20 的十六进制为 14;】定义的device.exe和launch30【30 的十六进制为 1E】中定义的gwes.exe, 注意Launch后面的数字范围为0到99 ,此范围之外的将不会有效果。【根据应用程序依赖性,设置Depend80;若无依赖,置为0】

 

    这样两种方法的效果都是系统都是系统先启动资源管理器explorer.exe(就是看到的默认桌面),然后启动我们的程序,(如果利用taskman shell然后去掉任务栏那么效果更好)但是这样还不够,我们如何不显示桌面,直接显示我们的程序呢?

 

    网上有人介绍的方法是去掉standard shell,但是我编译总是报错。

    采用的方法是替换注册表中lauch50中的explorer.exe为我的app.exe,即搞定。

 

    修改注册表的方法:先把带KITL的系统跑起来,在PB的TOOLS->Remote registry editor里修改,验证有效后,再去修改platfrom.reg, 或者自己写个REG文件,然后在platform.reg里INCLUDE进来; SYSGEN后确认PBWORKSPACE里相关项目的REL目录里reginit.ini文件里包含了自己做的修改后make image然后DOWNLOAD下去就OK了。

 

    值得补充的是,我们前面介绍的步骤中那个修改平台setting,添加语句的,是因为我每次都是重新sysgen和build,如果只是简单的make image的话(都是pb中的build OS菜单下的命令),那么将直接用release中的内容,因此也可以直接将文件放到release文件夹,然后改project.bib等实现往 image中添加文件。 同样,也可以直接修改release中的shell.reg中的launch50值为我们自己的程序(或者类似修改reginit.ini文件, reginit.ini文件存放有所有wince的静态注册表,来达到去掉桌面,直接启动我们程序的效果)。

注意,这么启动的程序,如果点击关闭,就会死机的,因为没有窗口运行了。实际运用中,当然不会让用户关闭我们的程序,除非他一起关闭系统。

如果也需要build的话,可以通过往image中添加文件的方法将我们改好的shell.reg添加到release目录 

 

 

 

 

如何定制自己的外壳  
1
、先开发一个外壳软件,假设名称为MyShell.exe  
2
、删除注册表[HKEY_LOCAL_MACHINE/init]下如下一行:  
   "Launch50"="explorer.exe"  
3
、在注册表[HKEY_LOCAL_MACHINE/init]下添加如下一行:  
   "Launch50"
"MyShell.exe"  
上述的“LaunchXX”中的XX为序列数,内核依据这个序列数按由小到大的顺序来分别执行所有子键列出的应用程序,具体数值应该为多少请参考帮助文档的说明。  
如果原来的内核中添加了标准外壳(standard shell)组件,或者添加了其它组件而这些组件需要依赖标准外壳,那么在PB中是无法删除标准外壳组件的,解决办法一是保留explorer.exe在内核中,二是删除依赖标准外壳的组件。


 

More Reference

1. http://blog.mcuol.com/User/iwillbeback008/Article/10903_1.htm

2. [WinCe 开发问题集锦]http://blog.csdn.net/gooogleman/archive/2008/08/09/2789586.aspx

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值