WinCE 应用程序开机自动运行的又一种方法

摘要:
同样,用快捷方式=hd)break加载SD卡中的应用程序是不可行的;}文件名和路径由命令行参数ShExeInfo指定。lpFile=lpCmdLine;2.创建快捷方式,如自动运行。lnk,并按如下方式编辑其内容:21#windowsshellexe。exe stdcard MyApp。exe,其中stdcard MyApp。exe是应用程序的绝对路径;3.添加MyApp。exe和自动运行。通过将以下内容添加到项目中,lnk到NK。bib文件:ShellExe。exe:WINCE420 PBWORKSPACES LioetEnTer RelDir ShellExe。exe NKSAutorun。lnkf:WINCE420 PBWORKSPACES LioetEnTer RelDir自动运行。lnkNKNKS注意:ShellExe的属性。exe不能是H(隐藏)。4.在项目中,将以下内容添加到数据中:目录:-File5.选择MakeImage以生成图像,将其刻录到FLASH中,然后开始运行。你可以看到MyApp。exe正确执行。调试和升级应用程序不需要重新编写内核。

 

近日在开发过程中遇到WinCE应用程序开机自动运行的问题,在网上找了找,发现大概有以下三种方法:

1、 将应用程序和应用程序快捷方式添加到映像里,再将快捷方式添加到StartUp目录下,这样当系统运行后应用程序就能自动运行;

2、 直接替换Wince的SHELL,即修改注册表:

[HKEY_LOCAL_MACHINE\init]
"Launch50"="explorer.exe"
"Depend50"=hex:14,00, 1e,00

把这个explorer.exe改成你的应用程序(比如:MyApp.exe);

3、 把应用程序加入到映像,修改注册表:

[HKEY_LOCAL_MACHINE\init]
"Launch80"="MyApp.exe"
"Depend80"=hex:1E,00

可以设置启动顺序和依赖程序;

以上方法都可行,但是都存在一个问题,就是应用程序是集成到NK里面的,也就是说每次升级应用程序都要重新编译下载内核,很麻烦,尤其在程序调试阶段,大家都希望把应用程序放在SD卡上,这样更新起来比较容易;据说通过第三种方法可以实现,即修改"Launch80"="MyApp.exe"为"Launch80"="\STDCard\MyApp.exe"( STDCard为SD卡目录),但是我试了一下没有成功,因为Launch80运行时SD卡的文件驱动还没有加载,找不到MyApp.exe文件。同样,采用快捷方式加载SD卡里的应用程序也不可行。
所以我采用了另一种方法,自己编了一个小程序,比如叫ShellExe.exe,将此程序加入到映像里,通过StartUp快捷方式调用ShellExe,ShellExe再去调用SD卡里的应用程序,具体实现步骤如下:
1、 在eVC下编译如下代码:

int WINAPI WinMain(HINSTANCE hInstance,
		HINSTANCE hPrevInstance,
		LPTSTR    lpCmdLine,
		int       nCmdShow)
{
	WIN32_FIND_DATA fd;
	HANDLE hd=INVALID_HANDLE_VALUE;
	int iCount = 20;
	while(iCount--)
	{
		hd=::FindFirstFile(lpCmdLine,&fd);
		Sleep(500);
		if(INVALID_HANDLE_VALUE!=hd) break;
	}
	if(0==iCount) return 0;
	FindClose(hd);
	SHELLEXECUTEINFO ShExeInfo={0};
	ShExeInfo.cbSize=sizeof(SHELLEXECUTEINFO);
	ShExeInfo.fMask=SEE_MASK_NOCLOSEPROCESS;
	ShExeInfo.hwnd=NULL;
	ShExeInfo.lpVerb=NULL;

	ShExeInfo.lpFile=lpCmdLine;
	ShExeInfo.lpParameters=L"";
	ShExeInfo.lpDirectory=NULL;
	ShExeInfo.nShow=SW_SHOW;
	ShExeInfo.hInstApp=NULL;

	ShellExecuteEx(&ShExeInfo);
	return 0;
}

  生成ShellExe.exe的可执行文件,此段代码主要功能是查找指定的应用程序,然后执行;下面这段代码可以保证在SD卡文件系统正确加载后才去执行应用程序;

while(iCount--)
{
	hd=::FindFirstFile(lpCmdLine,&fd);
	Sleep(500);
	if(INVALID_HANDLE_VALUE!=hd) break;
}

文件的名称和路径由命令行参数指定:

ShExeInfo.lpFile=lpCmdLine;

2、 新建一个快捷方式,如Autorun.lnk,按如下方式编辑其内容:

21#\windows\shellexe.exe \stdcard\MyApp.exe

其中\stdcard\MyApp.exe应用程序的绝对路径;

3、 将MyApp.exe和Autorun.lnk添加到NK里,方法是在project.bib文件内加入如下内容:

ShellExe.exe f:\WINCE420\PBWORKSPACES\LioetEnTer\RelDir\ShellExe.exe NK S
Autorun.lnk f:\WINCE420\PBWORKSPACES\LioetEnTer\RelDir\Autorun.lnk NK S

注意:ShellExe.exe的属性不能带H(隐藏).

4、 在project.dat里加入如下内容:

Directory("\Windows\Startup"):-File("Autorun.lnk","\Windows\Autorun.lnk")

5、 选择Make Image生成映像(当然Build也可以,就是慢点儿),烧到FLASH里,开机运行,可以看到SD卡里的MyApp.exe被正确执行。

总结

  这种方法用起来比较方便,ShellExe.exe不用每次都重新编译,只要根据应用程序路径修改Autorun.lnk即可,可以加载Flash、U盘、SD卡里的应用程序。调试及升级应用程序就不用重新烧写内核了。

免责声明:文章转载自《WinCE 应用程序开机自动运行的又一种方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos安装netcat知识表示之三——语义网络表示法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

android adb push 与 adb install 区别(两种安装APK的方法)

一般的,Android 应用程序有两种安装方法:1. 将应用程序的apk文件push到手机中,用如下命令:adb push xxxx.apk /system/app.2. 用adb install xxxx.apk进行安装3. 二者的比较以及注意事项:1) 用第一种方式的弊端:a. 会将原来系统中的对应的apk覆盖掉,所以,最好先备份出来一份,用如下命令:...

hbuilder(js+html+css)开发的APP效果实例

预约系统by cg 本系统组成:后台(驾校端)与APP(学员端)两部分组成。 学员以入学报名时的手机号登录APP可进行预约学车。 驾校方可在后台设置排班学车计划。 此模块效果具体如下: 后台-教练管理模块 首先添加教练:   后台-排班管理模块 培训时段设置 下一步在预约管理中设置培训时段   排班计划设置 设置好时段规则后,下一步设置预约排版计划:可...

4.Cobbler自动化安装Windows10

<!doctype html>02_3部署Windows10 定制Win10 PE 下载ADK工具https://go.microsoft.com/fwlink/p/?LinkId=526740 这个下下来之后安装完成之后,在你指定的目录中还有一个adksetup.exe。再次进行安装,并且选择以下功能 安装完成之后,先打开部署和映像工...

MicroPython基础知识总汇

MicroPython的系统结构 MicroPython系统的经典结构由三部分组成,分别是微控制器硬件、MicroPython固件、用户程序。 MicroPython支持的其它类型开发板,需要自己编译源代码,产生固件,并将固件下载到微控制器中才能运行MicroPython。(此内容我们后面会讲解到,千万别好高骛远!) MicroPython连接电脑 STM...

一个鼠标键盘控制两台甚至多台主机的方法--Synergy

     在多台主机,不同系统中操作。避免了更换键鼠的麻烦。即使下面图中的功能。   鼠标同时在三台或者多台主机之间进行移动,而且是无缝滑动,鼠标直接从左滑倒右,而且支持,这台电脑复制,另一台黏贴。非常的方便实用。       要实现以上功能有多个方法,第一是使用硬件,购买KVM转换器。第二种是使用软件,这里介绍一种非常使用的软件Synergy。使用Syn...

MES软件开发工具

MES软件开发工具 - 基于C/S架构的Winform快速开发框架平台   MES系统 - 制造执行系统   MESA(Manufacturing Execution System Association,国际制造执行系统协会)的白皮书对制造执行系统(Manufacturing Execution Systems,MES)所下的定义:“制造执行系统传递信...