最近在做项目程序的初始化配置,需要实现开机自启动、程序初始化配置等等。在网上搜了下,要实现WINCE系统启动后直接运行程序,有三种方法,这里主要是结合我的实际经历来阐述一下值得注意的一些问题。
1、不管是哪种方法,首先都得把应用程序app.exe放入NK映像中,在project.bib中添加
app.exe $(_FLATRELEASEDIR)\app.exe NK H
备注:①project.bib文件主要是说明需要打包进镜像文件的wince文件,和工程相关的配置都放在这里。该文件中主要包含MODULES和FILES项,对于.dll和.exe文件放在MODULES下面,而其他文件,比如配置文件.cfg,则放在FILES下面。
②$(_FLATRELEASEDIR)是指工程下的xxx_Release目录,所以在Make Image前需要把app.exe拷贝到该目录下,比如我的目录是C:\WINCE600\OSDesigns\S3C6410_DEMO\S3C6410_DEMO\RelDir\Samsung_SMDK6410_Release。
③放入到NK中的文件,在完成系统烧入之后,文件位于\Windows\目录下,且文件均为只读文件。因此,如果你希望在第一次启动程序时对程序进行配置,就不行了,因为无法写配置文件。这里我更改了一个思路来实现的,就是在第一次启动应用程序时检测有没有配置文件,没有则创建并进行相关配置写入。
④对于③中提出的创建并写文件的方法,需要注意的是文件不能保存在\Windows\根目录下,因为每次重启后,你的文件都会丢失,必须把文件放到\NandFlash中。只有随NK映像一起烧入的文件才不会在重启后丢失,对于只读的配置文件可以采用这种方法。
⑤在Platform Builder下双击project.bib进行上述添加后,是需要重新sysgen一下的,如果不想浪费时间来sysgen,则需要把该文件拷贝到xxx_Release目录下,因为我们修改的不是xxx_Release目录下的文件。比如我修改的project.bib是位于C:\WINCE600\OSDesigns\S3C6410_DEMO\S3C6410_DEMO\Wince600\SMDK6410_ARMV4I\OAK\files,需要将其拷贝到C:\WINCE600\OSDesigns\S3C6410_DEMO\S3C6410_DEMO\RelDir\Samsung_SMDK6410_Release,然后重新Make Image即可。
2、三种自启动的方法:
①创建一个快捷方式,指向app.exe应用程序,然后将快捷方式放到\Windows\startup下。
在Platform Builder中创建一个txt文件,命名为.lnk后缀,比如为test.lnk。编辑其内容为: 16#“\windows\app.exe“。前面的16是# 后面所有字符的总和,包括空格。最后如上述1所述,在project.bib中添加
test.lnk $(_FLATRELEASEDIR)\test.lnk NK H
在project.dat中添加:
Directory("\Windows\startup"):-File("test.lnk","\Windows\test.lnk")
同样注意,需要将修改的project.bib和project.dat,还有test.lnk、app.exe拷贝到xxx_Release目录下,然后重新Make Image。
备注:project.dat中主要是对文件系统、目录和文件分配表的描述,可在里面实现相关目录的创建和文件的拷贝。比如:
Directory("\Nandflash"):-Directory("Config")
表示在\NandFlash根目录下创建Config目录
Directory("\Windows\startup"):-File("test.lnk","\Windows\test.lnk")
表示将\Windows\test.lnk拷贝到\Windows\startup目录下,文件名命名为test.lnk
②修改shell.reg的文件,在[HKEY_LOCAL_MACHINE\init]中添加Launch80和Depend80,如下所示:
备注:这个是设定启动顺序,launch后面的数字越大越是后启动,Depend80后面的指定依赖项,为16进制,上面的语句表明explorer.exe依赖项为launch20定义的device.exe和launch30中定义的gwes.exe, app.exe需要依赖gwes.exe和explorer.exe。注意Launch后面的数字范围为0到99 ,此范围之外的将不会有效果。
该方法在启动时会先看到桌面,然后才启动应用程序app.exe。如果将Depend80的依赖改为1e 00 ,在很难看到桌面,但是启动应用程序后,会出现任务栏,破坏了程序的全屏显示。
③修改shell.reg中的launch50,不启动exploerer.exe,这样做的后果是如果程序退出,就会死机。在程序调试阶段最好别用这种方法了,因为你可能随时要退出来运行其他测试程序。
同样需要注意的是,在修改shell.reg文件后,如果不想重新sysgen,必须将其拷贝到xxx_Release目录下,然后重新Make Image。