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,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卡里的应用程序。调试及升级应用程序就不用重新烧写内核了。

时间: 2024-10-25 19:30:23

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

如何禁止应用程序开机自动运行

  在Win XP系统安装某些应用程序后,只要一启动电脑,不管是否使用它,它都会自己运行,影响电脑启动速度.要禁止应用程序开机自动运行,可以执行如下操作. 步骤1:打开"开始"菜单,选择"所有程序">"启动"菜单,在打开的子菜单中找到要禁止自动运行的应用程序,在该应用程序上单击鼠标右键,然后在弹出的快捷菜单中单击"删除"即可,如图1所示. 步骤2:有些应用程序的自启动项可能不在"启动"菜单里,要禁止该

【转】]Android实现开机自动运行程序

有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service.怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以"Don't call me, I'll call you back!"总结Android框架,真是说到点子上了.理解这句话的含义,许多有关Android平台上实现某种功能的问题,都能迎刃而解.   使用场景:手机开机后,自动运行程序,在屏幕上显示"Hello. I started!"字样. 背景知识:当Android启动

系统广播详解之开机自动运行程序

接收系统广播需要如下两步: 1.编写一个继承BroadcastReceiver的类,并实现OnReceive方法,如果应用程序收到系统发送的广播,就会调用onReceive方法. 2.在mainfirst中使用<receiver>标签来指定1中编写的接收系统广播的类可以接收哪一个BroadcastAction 下面以一个开机自动运行程序来讲解: 1.编写一个BroadcastReceiver类 public class StartupReceiver extends BroadcastRece

C#设置软件开机自动运行的方法(修改注册表)_C#教程

本文实例讲述了C#设置软件开机自动运行的方法.分享给大家供大家参考,具体如下: #region /// <summary> /// 开机启动项 /// </summary> /// <param name="Started">是否启动</param> /// <param name="name">启动值的名称</param> /// <param name="path"

visual stdio开机自动运行怎么实现?听说是注册表是怎么一回事?

问题描述 visual stdio开机自动运行怎么实现?听说是注册表是怎么一回事? visual stdio开机自动运行怎么实现?听说是注册表是怎么一回事? 解决方案 如果你的程序要实现开机自动运行,正规的做法是编写成windows服务,而不是什么"注册表设置". 解决方案二: visual stdio开机自动运行?你想电脑一开机,就运行 visual stdio,这个没有必要吧.当然,如果你一定需要,最简单的方法就是将 visual stdio 的快捷方式复制到"开始菜单中

Android编程实现开机自动运行的方法

本文实例讲述了Android编程实现开机自动运行的方法.分享给大家供大家参考,具体如下: 有些时候,应用需要在时就运行,例如某个自动从网上更新内容的后台service.怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以"Don''t call me, I''ll call you back!"总结框架,真是说到点子上了.理解这句话的含义,许多有关Android平台上实现某种的问题,都能迎刃而解. 使用场景:开机后,自动运行,在上显示"Hello. I started

360安全卫士怎样设置禁止软件开机自动运行

  如果很多软件开机自动运行的话,会影响我们电脑的开机时间和电脑的运行速度.下面就教大家把不必要软件的开机自动运行禁止掉. 1.首先打开360安全卫士,选择"优化加速"功能下的"启动项",在启动项里面我们可以设置软件开机是否自动运行. 2.查看开机启动项中的软件,对于不必要的软件可以在开机时禁止启动,如下图所示,你可以直接点击"禁止启动"按钮,也可以右击选择"删除此启动项".

Win10下开机自动运行语音识别怎么禁止?

1.设置这个功能我们按下Win+X组合键打开控制面板在进入到控制面板下面我们只需要切换到"大图标",在切换界面中我们点击"语音识别"细节如下图所示: 2.好了在进入后我们再点击"高级设置"打开进入,效果如下图所示: 3.在语音属性对话框,在用户设置下,找到并取消"启动试运行语音识别"后,点击底部确定按钮即可. 好了以上就是小编为各位介绍的关于禁止开机自动运行语音识别了,希望文章能够对各位带来有效的帮助.

酷狗开机自动运行取消图文教程

给各位酷狗软件的使用者们来详细的解析分享一下酷狗开机自动运行取消的图文教程. 方法分享: 首先在系统设置里把"系统启动时自动运行kugoo"的沟去掉,如果还不行.请到开始-->运行,键入msconfig,选到启动那一页,把kugoo3那个沟去掉. 好了,以上的信息就是小编给各位酷狗的这一款软件的使用者们带来的详细的酷狗开机自动运行取消的图文教程解析分享的全部内容了,各位看到这里的使用者们,小编相信大家现在那是非常的清楚取消的方法了吧,那么各位不想一开局就运行酷狗的朋友们就去按照小