天天看點

Wince 6.0 開機自啟動 總結

最近在做基于Wince6.0的應用程式的開發,應用程式基本開發完畢,需要把程式燒寫進核心。經過一段時間折騰,算是完成了任務,先總結如下:

wince6.0的應用程式燒寫進核心方法與wince5.0修改的地方基本一緻。這裡需要說明,在\WINCE600\OSDesigns\S3C6410_DEM0\RelDir\Samsung_SMDK6410_Release裡的操作前提是已經編譯生成NK.bin。此時再修改增加新的應用程式,隻需要Make Run-Time Image既可以把應用程式寫進核心。不能sysgen,否則前功盡棄。

方法:

注:以下所有操作均在該路徑下:\WINCE600\OSDesigns\S3C6410_DEMO\S3C6410_DEMO\RelDir\Samsung_SMDK6410_Release

1、将應用程式“ HelloWorld.exe ” 拷貝到該路徑下:\WINCE600\OSDesigns\S3C6410_DEMO\S3C6410_DEMO\RelDir\Samsung_SMDK6410_Release

2、建立一個名為HelloWorld.txt 的檔案裡面填入以下内容:

10#\Windows\HelloWorld.exe

之後将該檔案重命名為: HelloWorld.lnk

3、修改project.bib 檔案,在FILE 下添加

HelloWorld .exe $(_FLATRELEASEDIR)\ HelloWorld .exe NK H

HelloWorld .lnk $(_FLATRELEASEDIR)\ HelloWorld .lnk NK H

4、修改project.dat 檔案裡添加

Directory("\Windows\Startup"):-File("HelloWorld.lnk","\Windows\HelloWorld.lnk")

5、修改shell.reg 在

[HKEY_LOCAL_MACHINE\init]

"Launch50"="explorer.exe"

"Depend50"=hex:14,00, 1e,00

後面添加

"Launch80"="HelloWorld.exe"

"Depend80"=hex:1e,00

6、以上操作, 即可在系統啟動後, 自動運作“ HelloWorld.exe ” 了。

如果想不啟動wince 桌面而直接運作應用程式的話。需要修改shell.reg 檔案,将

[HKEY_LOCAL_MACHINE\init]

"Launch50"="explorer.exe"

"Depend50"=hex:14,00, 1e,00

修改為:

[HKEY_LOCAL_MACHINE\init]

"Launch80"="HelloWorld.exe"

"Depend50"=hex:14,00, 1e,00

經過以上步驟,打開VS2005,打開自己的wince6.0工程,make run-time image 即可生成 NK.bin。

以上步驟是借鑒,需要說明步驟5,修改系統資料庫,

由于在應用程式中使用了多個對話框,并且利用 create()建立了多個子對話框,利用setwindowpos()設定對話框顯示,在系統啟動的時候出現問題:如果把程式設定成開機自啟動,會出現debug assertion failed  winocc.cpp 的錯誤;但是把程式放進核心,等待系統啟動完畢,打開應用程式,發現沒有問題。

經過分析開機自啟動自己應用程式,可能是系統另一個程式沒有啟動,自己應用程式要依賴那個程式才能運作,是以導緻錯誤。至今不太清楚需要哪個程式啟動,但知道啟動wince的ie界面後再啟動程式 就沒有問題。

是以修改系統資料庫為:

修改shell.reg 在

[HKEY_LOCAL_MACHINE\init]

"Launch50"="explorer.exe"

"Depend50"=hex:14,00, 1e,00

後面添加

"Launch80"="HelloWorld.exe"

"Depend80"=hex:32,00

這樣就可以開機自啟動程式,沒有問題。說明:"launch80" 中80代表系統啟動應用程式的順序,由小到大依次啟動,越大越後啟動,數值0~99。關鍵是“Depend80“他說明80程式啟動需要後面的32程式,32是十六進制,十進制為50,是以說明80對應的helloworld.exe的啟動需要50對應的程式explorer.exe啟動完,才能啟動。

原文如下:

[HKEY_LOCAL_MACHINE\init]

"Launch20"="device.exe"      

"Launch30"="gwes.exe"      

"Depend30"=hex:14,00

核心啟動時執行device.exe和gwes.exe 。“LaunchXX”中的XX為序列數,核心依據這個序列數按由小到大的順序來分别執行所有子鍵列出的應用程式。“DependXX”為 “LaunchXX”的附屬鍵,此鍵鍵值表示“LaunchXX”指定的程式需要依靠哪個程式才能啟動。

例如“Depend30”=hex:14,00 。十六進制數14等于十進制數20,即:gwes.exe需要device.exe先啟動後才能啟動。