wince 6.0要怎么实现开机启动指定的程序.

abxialiang 2010-06-26 10:36:54
硬件平台是TE6410开发板,嵌入的系统是wince 6.0,现在我做了一个程序,保存在SD卡里面,希望在开启开发板电源后进入系统能自动运行我的程序.查了大量的资料都无法实现(如下),主要原因是在wince系统中写入的任何东西,重启后都会还原,可能要进行烧写什么的.不知我这种情况我什么好的方法可以实现呢?
http://blog.csdn.net/guoleimail/archive/2009/09/10/4537885.aspx
...全文
620 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
huohuobgp 2010-09-07
  • 打赏
  • 举报
回复
学习学习
weixiao361 2010-07-06
  • 打赏
  • 举报
回复
LZ链接的方法可以实现,仅仅要根据自己的情况做一些简单的修改

自己编了一个小程序,比如叫ShellExe.exe,将此程序加入到映像里,通过StartUp快捷方式调用ShellExe,ShellExe再去调用SD卡里的应用程序。

下面这段代码我是在VS2005中编译通过的,选择新建项目,选中Visual C++中的"智能设备"中的"Win32 智能设备项目”,在弹出的对话框中选择对应的SDK,创建新的项目。
将项目中的WinMain函数用下面的函数代替。
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
WIN32_FIND_DATA fd;
HANDLE hd=INVALID_HANDLE_VALUE;
lpCmdLine =_T("\\Storage Card\\DEBUG\\HMI_Run.exe");//根据相应要启动的程序修改此路径
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卡文件系统正确加载后才去执行应用程序;

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

21#\windows\shellexe.exe

3、 将ShellExe.exe和Autorun.lnk添加到NK里,方法是在project.bib文件的FILES(注意不要加到models区域里面了)区域内加入如下内容:


ShellExe.exe $(_FLATRELEASEDIR)\ShellExe.exe NK H
Autorun.lnk $(_FLATRELEASEDIR)\Autorun.lnk NK H
同时这两个文件要放在Release文件夹中。

4、 在project.dat里加入如下内容:
Directory("\Windows\Startup"):-File("Autorun.lnk","\Windows\Autorun.lnk")5、 选择Make Image生成映像烧到FLASH里,开机运行,可以看到SD卡里的MyApp.exe被正确执行。

5、上述方法不行的话,就在platform.reg中加入
[HKEY_LOCAL_MACHINE\init]
"Launch80"="ShellExe.exe"
"Depend80"=hex:1e,00
重现 Make Image 即可


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/guoleimail/archive/2009/09/10/4537885.aspx
hazy 2010-07-05
  • 打赏
  • 举报
回复
你发的连接里面已经写得很明白了,不能实现吗?
leoliu0128 2010-07-04
  • 打赏
  • 举报
回复
很想知道除了重新定制内核外还有没有其他的方法??修改hive注册表到底怎么可以实现保存呢??这个问题一直没搞懂,期待高手的解答~~~~~~~
cjdxling 2010-06-29
  • 打赏
  • 举报
回复
把你要启动的程序放到BSP安装的目录的一个文件夹当中,在bib文件当中把file字段下,按规范把它作为NK的一部分。然后,BSP中修改reg文件。如果你要直接启动你的程序那么你就把它放在 explorer 加载顺序的前面。
wolfmvp 2010-06-29
  • 打赏
  • 举报
回复
假如注册表为HIVE类型,也就是可断电保存,不用重烧系统那么麻烦…
yangtseriver1020 2010-06-29
  • 打赏
  • 举报
回复
路过 学到了东东
benbentobecow 2010-06-28
  • 打赏
  • 举报
回复
楼主你需要在你注册表(platform.reg)下面修改:
[HKEY_LOCAL_MACHINE\init]
修改launch 数字 = 你的应用程序名字
之后将你的英语程序放到你的release目录下面make image编译出新的nk
之后将nk烧进你的设备即可
zhdi1986 2010-06-28
  • 打赏
  • 举报
回复
你需要在Release 目录中的common.reg或者platform.reg中添加[HKEY_LOCAL_MACHINE\init]来启动你的程序,同时需要在config.bib中或者project.bib中把你的应用程序添加到NK.BIN中。然后重新makeimage就可以了。也可以做个HIVE BASE 的NK,直接修改注册表试试。
91program 2010-06-26
  • 打赏
  • 举报
回复
不定制CE系统,是很难实现这个要求的
abxialiang 2010-06-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 macrozhang001 的回复:]
在注册表里面指定就行了。

好像放到这里就可以了,但前提是你的应用所需的驱动必须要先于你的应用加载。
[HKEY_LOCAL_MACHINE\init]
[/Quote]

您说的不错,改注册表就可以了,但是现在的问题是注册表怎么改,直接在wince系统里面改话,重启后就什么都没有了.wince是 烧录在nand flash里面的,我觉得要添加启动项需要再烧写文件进去,我不会啊
IT铁哥 2010-06-26
  • 打赏
  • 举报
回复
在注册表里面指定就行了。

好像放到这里就可以了,但前提是你的应用所需的驱动必须要先于你的应用加载。
[HKEY_LOCAL_MACHINE\init]
abxialiang 2010-06-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xilidecai 的回复:]
修改注册表,重新定制一个系统就可以了嘛~~~
[/Quote]

说起来确实简单,但是怎么做啊,这写注册表也不是个容易的事呢.如果直接在系统里面写会还原,编译成bin文件也没有反应,用烧录的方法更加不懂啊.请用一个最简单的方法稍微请具体点好吗?
xilidecai 2010-06-26
  • 打赏
  • 举报
回复
修改注册表,重新定制一个系统就可以了嘛~~~
daifeijin 2010-06-26
  • 打赏
  • 举报
回复
你要自己定制一个系统才行,不然是不可以实现的。
Ei 2010-06-26
  • 打赏
  • 举报
回复
1.实现HIVE 写注册表。
2.定制CE的时候 加进去

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧