|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2014-11-27 08:37:40
|
显示全部楼层
本帖最后由 Link_Ling 于 2014-11-27 09:44 编辑
我先想到一个笨办法,就是将app.exe,包含到内核里去,当然同时也为了以后启动之后直接运行app.exe
网上有N篇方法关于应用程序自启动的,这里借花献佛一下
-------------------------------------------------------------------------------
----------------------------------借花献佛---------------------------------------------
就我的理解来说,wince系统是跑在ram里的,所以无法直接在根目录或者是\windows目录下保存文件.任何新建的文件在断电后都会消失.所以想要在\windows目录下保存文件只有编写在nk.bin中了.
方法一:
1) 假定Windows CE.NET目标工程目录为D:\WINCE600\OS_try,并且工程已经Build成功,假定Windows CE.NET的应用程序为MyApp.exe;
2) 将应用程序MyApp.exe复制到OS_try工程目录D:\WINCE600\OS_try\RelDir\xxx_Release 下
3) 修改OS_try工程的project.bib或者platform.bib文件,在FILES Section添加如下内容:
MyApp.exe $(_FLATRELEASEDIR)\MyApp.exe NK H
这里$(_FLATRELEASEDIR)相当于D:\WINCE600\OS_try\RelDir\xxx_Release 目录.文件属性如下:
S:系统
H:隐藏
R:压缩的资源文件
C:压缩文件
U:非压缩文件
4) 创建快捷方式文件MyApp.lnk,(先建文本文件,写入内容后再改扩展名为.lnk)文件内容如下:
18#\Windows\MyApp.exe
WINCE的快捷方式和WIN2K,XP的不同,只是一个后缀名为.LNK的文本文件.
其格式如下: 数字#路径
比如,有个快捷方式写法如下:23#\Windows\ToolViewer.exe
指的是指向WINDOWS文件夹下的Toolviewer.exe可执行文件.数字究竟代表的是什么意思,我也不太清楚;有一说法是#后的ACSII字符 的数量,但如果把上述例子改为1#\Windows\ToolViewer.exe也可正常运行,但去掉数字则系统无法识别.虽然可以正常使用,但建议还 是按照文档#之后的ACSII字符数量填写.
将MyApp.lnk文件也放入到OS_try工程目录d:\WINCE600\OS_try\RelDir\xxx_Release 下
5) 修改OS_try工程的project.bib或者platform.bib文件,在FILES Section添加如下内容:
MyApp.lnk $(_FLATRELEASEDIR)\MyApp.lnk NK H
6) 修改Os_try工程的project.dat文件,添加如下内容:
Directory("\Windows\StartUp":)-File("MyApp.lnk","\Windows\MyApp.lnk")
实际上第3步已经将MyApp.exe添加到了\windows目录下,所以这里只加快捷方式,如果是再拷执行文件到ram目录的话就有些浪费了.
注意:如果是已经成功编译完nk的,直接改d:\WINCE500\OS_try\RelDir\xxx_Release 目录下的platform.bib,project.dat等文件,选Platform Builder IDE:【Build】->【Make RunTime Image】(记得千万不要Build或者Rebuild,否则前功尽弃,需从头再来)
注:如果改的OS_try下的属性就只能全部Build了。
方法二: 主要思想:将应用程序添加到映象里,然后用你的应用程序直接替换Wince的桌面程序。
步骤:
1. 像方法一一样把你的应用程序添加到映象里。
2. 修改shell.reg(可以再XXX_Release文件夹下找):
[HKEY_LOCAL_MACHINE\init] "Launch50"="explorer.exe" "Depend50"=hex:14,00,1e,00
把explorer.exe改成相应的应用程序(如:MyApp.exe)
3. 【Make RunTime Image】一下 (记得千万不要Build或者Rebuild),把生成的NK.bin烧到设备中,这样就可以看到应用程序MyApp.exe自启动了。这样的好处是启动时wince桌面程序不会启动了,坏处就是当把应用程序关闭时由于原先wince桌面程序的丢失而会造成死机。
方法三:将应用程序添加到映象中,然后修改注册表,让应用程序自启动,但不替换wince的桌面程序,而是让wince像加载桌面一样加载应用程序。
步骤同方法二,只是在第二步中稍有不同:在shell.reg文件[HKEY_LOCAL_MACHINE\init]之下添加如下语句:
"Launch80"="MyApp.exe" "Depend50"=hex:1e,00
注: "Depend50"=hex:1e,00用来设置启动顺序和依赖程序的。若应用程序不依赖与其它程序,这句可以不加。
(原文链接)
http://blog.csdn.net/yizhou2010/article/details/6738285
-------------------------------------------------------------------------------
个人实验经历
方法一
1.我一开始是将应用程序App.exe放到C:\WINCE700\PLATFORM\SBC8600\FILES目录下
(SBC8600就是我的开发平台)
后面也可以放在C:\WINCE700\OSDesigns\SBC8600\SBC8600O\RelDir\xxx_Release,但如果放在这里的话不能build只能是make run-time image,注意中文版VS下是 “生成”->“make run-time image”
2.建立App.lnk然后将此文件复制到C:\WINCE700\PLATFORM\SBC8600\FILES目录下
后面也可以放在...\xxx_Release,
注意:App.lnk的内容 ,有引号!16表示#后面的字符,不包括引号
16#"\windows\App.exe"
3.将App.exe和App.lnk包含到内核中
在C:\WINCE700\PLATFORM\SBC8600\FILES\platform.bib文件的FILES Section添加:
App.exe $(_FLATRELEASEDIR)\App.exe NK U
App.lnk $(_FLATRELEASEDIR)\App.lnk NK H
这一步做完,生成的NK.bin,启动之后可以在开发板上的windows文件夹中找到App.exe了
也就完成了我的提问,下载应用程序掉电保护
4.
在C:\WINCE700\PLATFORM\SBC8600\FILES\platform.dat中添加:
Directory("\Windows\startup"):-File("App.lnk","\Windows\App.lnk")
注意这一步的意思是使App.lnk拷贝到\Windows\startup中:然后开机调用快捷方式
好了到这里,接下去就是sysgen,漫长的等待,大概20min
然后将...\xxx_Release下的NK.bin下到开发板中
我的问题也就出现了,开机显示了一下下桌面,就自运行App.exe,但是USB鼠标没有反应了,感觉是开机USB驱动还没调用或是Power管理的问题,因为USB鼠标供电都没供上。
无奈之下尝试后面几个方法
方法三:
1 先完成方法一的1、2、3
在已完成一次sysgen的情况下,可以Copy相应的App.exe,App.lnk到...\xxx_Release下
注意:修改...\xxx_Release下的platform.bib,(不是C:\WINCE700\PLATFORM\SBC8600\FILES下的)a
不用修改platform.dat
2 在...\xxx_Release下找到shell.reg,打开添加
"Launch80"="App.exe"
"Depend80"=hex:14,00, 1e,00
上面有一个Launch50,直接Copy修改过来就行
因为前面已经Sysgen,在...\xxx_Release已经有修改过的platform.bib和platform.dat,还有app.lnk、app.exe,所以直接“生成”->“make run-time image”,1min就可以了
然后将...\xxx_Release下的NK.bin下到开发板中
上电重启,自运行App.exe,等了1s不到,USB鼠标供电成功
|
|