wince6.0下将应用程序放到指定存储设备下运行的方法
来源:互联网 发布:资金合作社软件 编辑:程序博客网 时间:2024/06/02 05:09
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卡里的应用程序。调试及升级应用程序就不用重新烧写内核了。
以上类容属于装载 ;转自:http://www.vckbase.com/index.php/wv/1457
一下类容是自己遇到的问题
Failed reading e32 pointer in module Autorun.lnk 编译出现这样的错误时 有可能是你的打包文件没有放到files下
- wince6.0下将应用程序放到指定存储设备下运行的方法
- wince6.0下将应用程序放到指定存储设备下运行的方法
- WINCE6.0 下的应用程序开机启动
- C# 将引用的DLL文件放到指定的目录下
- C# 将引用的DLL文件放到指定的目录下
- 在顺序存储模式下将所有的负数放到正数前面的三种算法
- 在asp.net2.0项目在vs2005下运行没问题,放到IIS下就出现"服务器应用程序不可用",为什么?在asp.net2.0项目在vs2005下运行没问题,放到IIS下就出现"服务器应用程序不可用",为什么?
- Windows下关闭占用指定端口应用程序的方法
- Windows下关闭占用指定端口应用程序的方法
- (转)Windows下关闭占用指定端口应用程序的方法
- wince6.0下应用程序自启动(总结)
- wince6.0下应用程序自启动(总结)
- linux下将自己的程序放到系统命令中
- WINCE6.0下修改了PUBLIC下的源代码的快速编译方法
- win7下模拟wince6.0环境运行 程序
- 盘点WinCE6.0下的小游戏
- Wince6.0下DeviceEmulator SDk的导出
- Wince6.0下DeviceEmulator SDk的导出
- 投影矩阵与最小二乘
- hdoj.1219 AC Me 20140815
- js常用表达式
- Python标准库10 多进程初步 (multiprocessing包)
- tomcat的自动加载
- wince6.0下将应用程序放到指定存储设备下运行的方法
- android启动之子系统切换
- Linux程序源码编译安装的configure配置详解
- ExpandableListView讲解
- YUV格式
- POJ 1182 食物链 并查集 + 权值
- 【HDU1074 dp状态压缩】Doing Homework 第一道状态压缩dp
- ffmpeg视频格式转换分析
- IDempiere的安装入门第一篇(郑州就维软件)