Wince下定制开机自启动程序

上网查了一下,发现相关的贴子还真是不少. 最近因公司的项目需要,我做了个简单的程序则试该功能. 用网上的很多方法发现是行不通的, 估计最初应该是可以用的, 然后大家都是互相转载, 转来转去有些东西漏了或转错了,因为很少有人真正去测试过,看到就直接转. 我在这里根据自己的实际测试,整理出整个过程,并对一些步骤的原理做了解释

假设应用程序为:

方法一:主要思想:将应用程序及其快捷方式也添加到映像里,再将快捷方式添加到StartUp目录下,这样当系统运行后应用程序就能自动运行。这种方法不能覆盖wince的桌面, 只是开机的时候加载一个应用程序启动.

步骤:

1先保证原工程文件是可以编译成功的。 并且内核映像是可以运行的.

2创建快捷方式文件,文件内容如下: 10#”\Windows\”(注意引号一定要) 其中草药10表示#后所有字符的个数,包括引号, 要根据自己的应用程序的名字修改. (试过这个数字即使不是#后的字符的个数也可以正常启动, 这个我就搞不懂了)把该文件和复制到xxx_Relase所在的目录(所在目录).

3在pb中修改文件,在FILES Section添加(FILES区哉可以包含不是就地执行的可执行文件):       $(_FLATRELEASEDIR)\ NK H       $(_FLATRELEASEDIR)\  NK H (注:$(_FLATRELEASEDIR)表示xxx_Relase文件夹;NK后面的H表明加入到中的文件为隐藏属性)

4 把快捷方式添加到StartUp目录下,具体为:修改工程的文件,添加如下内容: Directory("\Windows\Startup"):-File("","\Windows\") 由于wince ROM 映像默认将所有文件放到windows目录下, 某些文件在系统引导时必须被移动到特定的位置, .dat文件可以实现移动的功能. 比如上面就是把位于windows下的移动到windows\startup下面. Startup目录决定了程序可以自启动.

5进入build os 菜单, 选择build and sysgen(clean before buiding要打勾),编译完成,会有错误提示你未在你的磁盘上找到(因为我们在编译的时候选择了clean before building,原来放在xxx_Relase目录下的文件都被clean了) . 这时把和文件重新拷贝到xxx_Relase文件夹下,然后MakeImage一下. 这样就把应用程序写进了内核(会在windows目录下). 把生成的或烧写到flash里,这样就可以看到你的应用程序自启动了. 到这里可能有人会问, 既然和编译的时候会被clean掉,第二步不就可以不用先复制,而到第五步时再复制过来? 这个问题我也想过,但实际测试发现这样的话并没有把和两个文件写进内核(系统启动后,windows下找不到). Bib文件和dat文件都是在make image阶段在用到的,没理由会出现这个问题. 这个问题一直想不通,希望高手解答.

方法二:将应用程序添加到映像里,然后用你的应用程序直接替换Wince的桌面程序,这种方法其实就是自己的应用程序做为wince的shell

步骤:

1. 首先执行方法一的1~3步把应用程序烧进内核.

2. 进入build os 菜单, 选择build and sysgen(clean before buiding要打勾,这里不打勾有时会出现编译的内核不能运行),编译完成,会有错误提示你未在你的磁盘上找到(因为我们在编译的时候选择了clean before building,原来放在xxx_Relase目录下的文件都被clean了) . 这时把和文件重新拷贝到xxx_Relase文件夹下, 然后修改(若在pb里找不到,可以到xxx_Relase文件夹下找):[HKEY_LOCAL_MACHINE\init]"Launch50"="""Depend50"=hex:14,00, 1e,00把这个改成你的应用程序(比如:)。当wince系统启动时, 它会顺序执行launchxx, xx是一个十进制数, dependxx指出在当前应用程序运行之前launch20(十六进制是14),lanuch30(十六进制是1e)必须先运行. 打开可以看到. Lanuch20对应的是, launch30对应的是. 我们自己的shell应该在这两个进程加载完成之后才能正常运行. 另外,wince帮助文档里有一段话: This function must be called by all applications that the kernel starts at startup through the HKEY_LOCAL_MACHINE\Init registry key.

看来我们的源程序里应该加上signalStarted函数了. 对于mfc的程序我们可以在initinstance的return 以前. 加上这行代码SignalStarted(_wtol(GetCommandLine())); 其实如果一个应用程序要从init里加载,那么肯定有一个unicode字符串作为命令行参数,这个参数被转化为整型后传给signalStarted函数. 通过这种方式通知操作系统它本身运行完毕. 建议任何通过init启动的应用程序都应该加上signalStarted函数.

3. MakeImage一下, 把生成的烧写到flash里,这样就可以看到你的应用程序自启动了.  而且wince的桌面程序都不会启动了,你的程序就是wince的shell,但有个问题,就是当你把应用程序关闭的时候由于原wince桌面程序的丢失而会使机器死机。

方法三:主要思想:将应用程序添加到映像里,然后修改注册表,让应用程序自启动。这回不替换wince的桌面程序,而是让wince像加载桌面一样加载你的应用程序,效果跟方法一是一样的。

跟方法二是一样的,稍有不同:在文件中[HKEY_LOCAL_MACHINE\init]之下添加如下语句:"Launch80"="" "Depend80"=hex:1E,00跟方法2的区别是没有换掉.

当然,前面三个方法的前提肯定是你的这个程序,在当前的PB工程编译的内核里有可以正常运行的. 这一句看起来是废话,其实很重要. 我这在调试的时候,一度程序不能启动, 我一直认为是注册表或bib文件出错了, 调了很久都不行. 最后才发现,我这个应用程序是在之前的SDK下编译的, 在当前的系统一根本不能运行. 于是我又在可用的系统下重新编译了一个新的SDK, 问题解决.

转载于:https://www.cnblogs.com/xilentz/archive/2010/04/22/1717848.html

Wince下定制开机自启动程序相关推荐

  1. Wince 6.0 开机自启动 总结

    最近在做基于Wince6.0的应用程序的开发,应用程序基本开发完毕,需要把程序烧写进内核.经过一段时间折腾,算是完成了任务,先总结如下: wince6.0的应用程序烧写进内核方法与wince5.0修改 ...

  2. 如何让电脑开机自启动程序

    如果你是想让电脑开机自启动程序的话你来对了地方 首先同时按下徽标键(一个键四个小方块的那个)+r键 然后输入shell:startup 在打开的文件夹中把你需要启动的程序放进去即可 直接把图标拖进去 ...

  3. jetson nano 相关设置(开机自动登录、取消休眠和屏保、开机自启动程序)

    目录 1. 开机自动登录 2. 取消屏保 2.1. 单击左下角图标,依次进入Preferences和 Screensaver 2.2. 进入Display Modes,Mode选择Disable Sc ...

  4. Ubuntu开机自启动程序的方法

    文章目录 Ubuntu开机自启动程序的方法 目标效果 方案1:修改rc.local 测试结果 方案2:单独增加一个开机启动的脚本 错误1 错误2 实测结果 refs 方案3:利用官方快捷方式启动 Ub ...

  5. Jetson nano开机自启动程序

    目录 前言 1.介绍 2.创建开机自启动程序 2.1 创建一个bash文件 2.2 创建一个service文件 2.3 添加权限 2.4 移动service文件 2.5 启动服务 2.6 停止/重启服 ...

  6. Linux开机自启动程序死循环,无法进入系统

    使用Linux系统开机自启动程序,任何键都无法结束程序,重启也不行. 1 杀死跑飞的程序 当你把你的Linux弄死机了,是完全的死机了,你按了Ctrl + Alt + Backspace,也没用的时候 ...

  7. Ubuntu管理开机自启动程序

    点击左侧的图标,在搜索栏上输入gnome-session,即可看到 "启动应用程序"的图标, 如下图: 在此管理开机自启动程序

  8. Centos 下添加开机自启动服务和脚本

    最近刚玩Centos7的系统,跟Centos6还是很多方面有改变的,这里记录一下怎么在Centos7下添加开机自启动脚本和服务的方法. 1.添加开机自启服务 我这里以docker 服务为例,设置如下两 ...

  9. Linux打开rtf文档,在linux下设置开机自动启动程序的方法_精品.rtf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsplinux/Unix相关 在linux下设置开机自动启动程序的方 ...

最新文章

  1. [笔记]用VS2010编译运行项目时报“LINK : fatal error LNK1104:...
  2. R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用nfactors参数指定抽取的因子的个数、fa函数因子分析结果解读(Extracting common facto
  3. 《机器学习技法》---模型聚合
  4. mysql在linux下的安装(5.7版本以后)
  5. pso算法c++语言代码,一C++PSO(PSO)算法
  6. win10主题更换_还不升级? win10精简版不到10G,运行比win7还快,旧电脑的福音
  7. wordpress关闭更新提示
  8. about x86 protected mode
  9. 单片机 c语言百位加上小数点,51单片机水温控制LCD显示加VB上位机温度曲线绘制...
  10. 求职时,我问过的问题
  11. 计算机主板电池,如何更换计算机主板电池
  12. 转:HTTP ---HTTP头的编码问题(Content-Disposition)
  13. MasterPage
  14. 《圈圈教你玩USB》之 USB键盘 【串口输出】
  15. 4800包括了路线坐标正反算、竖曲线、超高加宽、边坡放样及断面计算等程序。
  16. wordpres报错sfile_exists() [function.file-exists]: File name is longer than the maximum allowed
  17. MC34063降压电路
  18. 网络本科计算机统考操作题,计算机本科统考复习操作题操作步骤.doc
  19. 刷固件版本 1756-RM2
  20. 【数论】因数与倍数(一)质数与合数

热门文章

  1. rhel配置磁盘分区_rhel配置磁盘分区_centos系统三套硬盘分区方案[图文设置版]
  2. linux代码签名,浅谈Linux容器和镜像签名(示例代码)
  3. 柱形图无数据可选中_这种漂亮的“连体”柱形图,99%的人不会做!
  4. Docker之Dockerfile 指令详解
  5. Oracle创建表空间、用户、分配权限语句
  6. [转] Spring Boot特性
  7. Deactivate .NET refector
  8. JS replace()方法-字符串首字母大写
  9. Python中赋值、浅拷贝、深拷贝
  10. oracle limsize,查看oracle数据库----size