文档详情

wince 自启动程序设置

飞***
实名认证
店铺
DOC
71.50KB
约14页
文档ID:4943399
wince 自启动程序设置_第1页
1/14

wince 自动启动程序设置修改注册表[HKEY_LOCAL_MACHINE\init]“Launch80〃=”app.exe”“Depend80〃=hex:14,00,1e,00这个是设定启动顺序,launch 后面的数字越大的越是后启动,Depend80 后面的指定依赖项,为 16 进制,上面的语句表明依赖项为 launch20 定义的device.exe 和 launch30 中定义的 gwes.exe, 注意 Launch 后面的数字范围为0 到 99如何让应用程序随 wince 操作系统自启动如何让应用程序随 wince 操作系统自启动呢?我搜索了一下,网上有不少方法,但有时也会有疏漏的地方,通常一点小小的错误也会导致整个环节不能进行下去在此,我想跟大家共同探讨一下,欢迎大家指正首先,假设你的应用程序为:MyApp.exe方法一:主要思想:将应用程序及其快捷方式也添加到映像里,再将快捷方式添加到 StartUp 目录下,这样当系统运行后应用程序就能自动运行步骤:1 先保证原工程文件是可以编译成功的假设编译好的 nk.bin 文件所在文件夹为 xxx_Relase2 创建快捷方式文件 MyApp.lnk,文件内容如下:10#”\Windows\MyApp.exe”(注意引号)3 在 pb 中修改 project.bib 文件,在 FILES Section 添加:MyApp.exe $(_FLATRELEASEDIR)\MyApp.exe NK HMyApp.lnk $(_FLATRELEASEDIR)\MyApp.lnk NK H(注:$(_FLATRELEASEDIR)表示 xxx_Relase 文件夹;NK 后面的 H 表明加入到 nk.bin 中的文件为隐藏属性)4 把快捷方式添加到 StartUp 目录下,具体为:修改工程的 project.dat 文件,添加如下内容:Directory("\Windows\Startup"):-File("MyApp.lnk","\Windows\MyApp.lnk")J5 从道理上讲,如果这时把 MyApp.exe 和 MyApp.lnk 拷贝到 xxx_Relase 文件夹下,然后 Build->MakeImag 的话就会把你的应用程序添加到 NK 里,但实际情况并非如此,经我实验,先要把工程文件全部 rebuild 一下,我这儿是sysgen 了一下,如果你设置了在编译完后 MakeImage 的话,会有错误提示你未在你的磁盘上找到 MyApp.exe。

不用管它把 MyApp.exe 和 MyApp.lnk 文件拷贝到 xxx_Relase 文件夹下,然后 MakeImage 一下(记住此时千万不能再rebuild 了,否则会前功尽弃),把生成的 NK.bin 烧写到 flash 里,这样就可以看到你的应用程序 MyApp.exe 自启动了.方法二:主要思想:将应用程序添加到映像里,然后用你的应用程序直接替换 Wince 的桌面程序步骤:1. 像方法一一样把你的应用程序添加到映象里提示:要查看添加映象是否成功,可以在操作系统启动后,看一下windows 目录下是否有你的应用程序 MyApp.exe(先要设置为可以查看系统文件和隐藏文件)2.修改 shell.reg(若在 pb 里找不到,可以到 xxx_Relase 文件夹下找):[HKEY_LOCAL_MACHINE\init]"Launch50"="explorer.exe""Depend50"=hex:14,00, 1e,00把这个 explorer.exe 改成你的应用程序(比如:MyApp.exe)3. MakeImage 一下(还是记住不能再 build 了),把生成的 NK.bin 烧写到 flash 里,这样就可以看到你的应用程序 MyApp.exe 自启动了.这样做的好处是启动的时候 wince 的桌面程序都不会启动了,坏处是当你把应用程序关闭的时候由于原 wince 桌面程序的丢失而会使机器死机。

方法三:主要思想:将应用程序添加到映像里,然后修改注册表,让应用程序自启动这回不替换 wince 的桌面程序,而是让 wince 像加载桌面一样加载你的应用程序,效果跟方法一是一样的步骤跟方法二是一样的,只是第二步稍有不同:在 shell.reg 文件中[HKEY_LOCAL_MACHINE\init]之下添加如下语句:"Launch80"="MyApp.exe""Depend80"=hex:1E,00J说明:"Depend80"=hex:1E,00 用来设置启动顺序和依赖程序,若你的应用程序不依赖于其它程序,这句可以不加另外,应用程序也不一定就要加载到映象文件里,可以直接从 u 盘,硬盘,sd卡等加载,但是要先保证你的应用程序自启动时系统已能正确识别挂接的 u 盘,硬盘,sd 卡等有两个地方启动程序:1. 在注册表 HKLM\Init 上加入键值:Launch99="你的程序名(可以是绝对路径)",如果你的程序要依赖别的程序,还要加入:Depend99=依赖程序的启动序号(可以看看 Init 下其它程序的启动顺序)2.好像是在 HKLM 下有个 WBT,里面有个地方也可以加入启动程序,每次注销都会重新启动一遍,而 Init 只有在重新开机时才启动。

你要启动的程序,可以放在你的 flash 卡上(Init 需要加入绝对路径),或者加入 bib 文件,编译进内核WinCE 应用程序开机自启动方法近日在开发过程中遇到 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,00J可以设置启动顺序和依赖程序;以上方法都可行,但是都存在一个问题,就是应用程序是集成到 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;JShExeInfo.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 SAutorun.lnk f:\WINCE420\PBWORKSPACES\LioetEnTer\RelDir\Autorun.lnk NK S 注意:ShellExe.exe 的属性不能带 H(隐藏).4、 在 project.dat 里加入如下内容:JDirectory("\Windows\Startup"):-File("Autorun.lnk","\Windows\Autorun.lnk")5、 选择 Make Image 生成映像(当然 Build 也可以,就是慢点儿),烧到 FLASH 里,开机运行,可以看到 SD 卡里的 MyApp.exe 被正确执行。

总结这种方法用起来比较方便,ShellExe.exe 不用每次都重新编译,只要根据应用程序路径修改 Autorun.lnk 即可,可以加载 Flash、U 盘、SD 卡里的应用程序调试及升级应用程序就不用重新烧写内核了WinCE 自启动 Shell 的问题WinCE 开机即运行定制的 Shell 是很多系统的基本要求,有时还需要屏蔽WinCE 自带的 ShellWinCE 中程序的自启动,一般有两个实现方法,修改注册表和添加自启动快捷方式修改注册表比较方便,如下:[HKEY_LOCAL_MACHINE\init]"Launch70"="MyApp.exe""Depend70"=hex:14,00,1e,00只要将 MyApp.exe 打包到 NK,并在 platform.reg 中加入上面的注册表信息,这样 WinCE 启动时便会自动运行该程序但这时 WinCE 自带的 Shell 总是先出来,然后才运行 MyApp.exe,为了避免这种情况,我们可以将注册。

下载提示
相似文档
正为您匹配相似的精品文档