让程序在
Windows CE
系统启动时自动运行(方法一)
1.
假定
Windows CE.NET
目标工程目录为
E:/ SMDK2440
,并且工程已经
Build
成功,
假定
Windows CE.NET
的应用程序为
MyApp.exe
并存放在本地硬盘
E
盘下;
2.
修改
MyWinCE
工程的
project.bib
文件,在
MODULES
添加如下内容:
MyApp.exe E
:
/MyApp.exe NK H
3.
创建快捷方式文件
MyApp.lnk
,文件内容如下:
10#/Windows/MyApp.exe
MyApp.lnk
文件也放入
E:/
目录下;
4.
修改
MyWinCE
工程的
project.bib
文件,在
FILES
添加如下内容:
MyApp.lnk E
:
/MyApp.lnk NK H
5.
修改
MyWinCE
工程的
project.dat
文件,添加如下内容:
Directory("/Windows/Startup"):-File("MyApp.lnk","/Windows/MyApp.lnk")
8. Platform Builder IDE
:【
Build
】
->
【
Make Image
】(记得千万不要
Build
或者
Rebuild
)
9.
成功后,得到的
NK.bin
(或
NK.nb0
)就包含了应用程序
MyApp.exe
和
MyApp.lnk
,当把相应的内核烧入开发板
MyApp
程序就会在系统启动时自动运行。
关于系统程序的启动顺序(自启动方法二)
采用这种方法的前提是你要启动的应用程序已经编译进了
NK.nb0
或者
NK.bin
中了。具体方法及说明如下:
platform.reg
或者
common.reg
,在
[HKEY_LOCAL_MACHINE/init]
段添加如下类似内容
:
"LaunchXX"="< 你的程序 >"
"LaunchXX"="< 你的程序 >"
"DependXX"=hex:YY,ZZ,...
其中
XX
是十进制的数字,表示
<
你的程序
>
的启动顺序标识;
YY,ZZ
是
Least Significant
的十六进制数字,表示
<
你的程序
>
所依赖(先于
<
你的程序
>
运行)的程序的启动顺序标识。
来看两个系统的例子:
[HKEY_LOCAL_MACHINE/init]
; @CESYSGEN IF CE_MODULES_SHELL
"Launch10"="shell.exe"
; @CESYSGEN ENDIF
IF IMGTINY !
; @CESYSGEN IF CE_MODULES_DEVICE
"Launch20"="device.exe"
; @CESYSGEN ENDIF
; @CESYSGEN IF CE_MODULES_GWES
IF NOGUI !
"Launch30"="gwes.exe"
"Depend30"=hex:14,00
ENDIF
Launch10
、
Launch20
、
Launch30
表示了系统在启动时会先加载“
shell.exe
”
,
然后再加载“
device.exe
”和
”gwes.exe”,
而且可以看到
”gwes.exe”
的启动还有依赖“
device.exe
”
,
即只有在“
device.exe
”完全启动后“
gwes.exe
”才能启动。如果我们要在系统启动时候也启动自己的程序可以像如下设置:
例如
:
"Launch80"="MyApp.exe"
"Depend80"=hex:1E,00
语意为程序
MyApp.exe
的启动顺序标识是
80
,它依赖标识为
30
(即
001E
)的程序。
如果
<
你的程序
>
不依赖其他程序,那么不需要添加
"DependXX"=hex:YY,zz,...
指示;
如果
<
你的程序
>
依赖多个程序,那么在
"DependXX"
指示中指明;
eg.
"Launch80"="MyApp.exe"
"Depend80"=hex:0A,00,1E,00
语意为
MyApp.exe
程序的启动依赖标识为
10
和
30
的程序。注意
Launch
后面的数值不能和系统默认的某个程序的值一样,不然在编译的时候就会报错。
修改完后只要
PlatformBuilder IDE->Build->MakeImage
,生成新的
NK.bin
就可以了,不用重新编译。
去掉系统启动
explorer
项
Windows CE.NET
的桌面确实漂亮,但是如果我们的嵌入式系统使用微软的桌面,总让我感觉不伦不类。因此,要想个办法,让我们的程序开机启动,把微软的那个桌面给替换掉。其中使用
startup
的快捷方式再加上隐藏任务栏的方法,效果非常的好,但是每次启动的时候,总是微软的桌面先出来,再启动我们的程序,感觉还是不爽。
有一种方法如下:
1)
首先新建工程,把你的应用程序放到内核里面去(前面介绍了如何做);
2)
编译平台;
3)
修改
E:/SMDK2440/RelDir/SAMSUNG_SMDK2440_ARMV4IRelease/shell.reg
的文件
:
在文件中有这样一行:
[HKEY_LOCAL_MACHINE/init]
"Launch50"="explorer.exe"
"Depend50"=hex:14,00, 1e,00
把这个
explorer.exe
改成你的应用程序(比如:
MyApp.exe
)就可以了;
4) Platform Builder IDE
:【
Build
】
->
【
Make Image
】(记得千万不要
Build
或者
Rebuild
)否则就前功尽弃了。
5)
成功后,得到的
NK.bin
(或
NK.nb0
)就包含了应用程序
MyApp.exe
和
MyApp.lnk
,当把相应的内核烧入开发板
MyApp
程序就会在系统启动时自动运行。
至此
,
随心所欲的让自己的程序在
Windows CE
系统启动时自动运行了。
原理说明:
1.将自定义的文件打包进NK.bin中的方法有两种
一种是编辑
project.bib
文件。
在
FILES Section
描述文件的名称,源文件的路径,文件在目标系统中的属性。在上面,
MyApp.exe $(_FLATRELEASEDIR)/MyApp.exe NK H
表示将你所建工程如:
E:/SMDK2440/RelDir/SAMSUNG_SMDK2440_ARMV4IRelease
目录下的文件
MyApp.exe
文件打包进
NK.bin
,并且此文件将处在
Kernel
内存区,文件属性类型为隐藏。
第二种方法是添加
User Feature
。
PlatformBuilder IDE->FeatureView->
在
"MyWinCE Features"
上
Right Click
鼠标
->Insert User Feature->
指向想打包的文件。
无论采用哪种打包方法,在启动的
Windows CE
系统中,文件都在
/Windows
目录下。下一步就是根据需要重新组织文件系统的目录结构。
2.组织文件系统的目录结构的途径在于修改project.dat文件
添加文件目录结构的描述。描述的语法如下:
root:-Directory("<
目录名
>")
表示在
root
目录(
/
)下创建目录
Directory("/<
目录名
>"):-Directory("<
子目录名
>")
表示在指定目录下创建子目录
Directory("/("<
目录名
>/<
子目录名
>"):-File("<
文件名
>.<
扩展名
>","/Windows/<
文件名
>.<
扩展名
>")
表示在指定目录下创建
/Windows
目录下文件的拷贝,显示名称是
<
文件名
>.<
扩展名
>
。
3.应用程序并不一定需要打包进NK.bin
假定程序在硬盘的某个位置,如
/
硬盘
/MyApp/MyApp.exe
,那么只需创建快捷方式文件,链接指向
/
硬盘
/MyApp/MyApp.exe
就是了。
整个过程简单来说就是,想清楚应用程序将会出现在哪个目录下,创建正确的快捷方式文件,修改目标系统目录组织配置,最后将应用程序和相应的快捷方式文件打包进
NK.bin
。