您的位置:首页 > 其它

在Windows CE系统让程序启动时自动运行

2012-07-13 10:04 218 查看
让程序在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"="<你的程序>"

"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。

ARMCE备注:

1 最好不要修改common.reg,需要改动在platform.reg中做,platform.reg中的注册表内容会覆盖common.reg的,如果改动了common.reg编译起来就比较麻烦了

2 改动了platform.reg需要手动将其从platform拷贝到release目录,这样才可以直接执行makeimg,因为makeimg是不会拷贝files目录下的东西的

3 lnk文件的内容可能有些问题,标准格式为{number}#{link}

其中:

{number}为#后面所有字符的长度,也即字节数

{link}为指向的exe的路径

如:

16#\Windows\cmd.exe

23#"\Windows\dmacnect.exe"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: