讓程式在Windows CE系統啟動時自動啟動並執行兩種方法
一、捷徑
假定Windows CE.NET目標工程為CEPC類型,目錄為E:\Project\MyWinCE,
並且工程已經Build(或者Rebuild)成功;
假定Windows CE.NET的應用為MyApp.exe
1.將MyApp.exe複製到E:\PROJECTS\MyWinCE\RelDir\CEPC_X86Release目錄下;
2.修改MyWinCE工程的project.bib檔案,在FILES Section添加
MyApp.exe $(_FLATRELEASEDIR)\MyApp.exe NK H
3.建立捷徑檔案MyApp.lnk(文字檔),檔案內容如下:
10#\Windows\MyApp.exe
MyApp
.lnk檔案也放入E:\PROJECTS\MyWinCE\RelDir\CEPC_X86Release目錄下
4.修改MyWinCE工程的project.bib檔案,在FILES Section添加
MyApp.lnk $(_FLATRELEASEDIR)\MyApp.lnk NK H
5.修改MyWinCE工程的project.dat檔案,添加如下內容:
Directory("\Windows\Startup"):-File("MyApp.lnk","\Windows\MyApp.lnk")
6.Platform Builder IDE->菜單Build->MakeImage(記得千萬不要Build或者Rebuild,
否則你就要重新來一遍)
到此得到的NK.bin就包含了應用程式MyApp.exe和MyApp.lnk,
並且MyApp程式會在系統啟動時自動運行。
說明:
I.將自訂的檔案打包進NK.bin中的方法有兩種:
一種是編輯project.bib檔案。
在FILES Section描述檔案的名稱,源檔案的路徑,
檔案在目標系統中的屬性。在上面,
MyApp.exe $(_FLATRELEASEDIR)\MyApp.exe NK H
表示
將E:\Project\MyWinCE\RelDir\CEPC_X86Release目錄下的檔案MyApp.exe檔案打包進NK.bin,
並且此檔案將處在Kernel記憶體區,檔案屬性類型為隱藏。
第二種方法是添加User Feature。
PlatformBuilder IDE->FeatureView->在"MyWinCE Features"上Right Click滑鼠->
Insert User Feature->指向想打包的檔案。
無論採用哪種打包方法,在啟動的Windows CE系統中,
檔案都在\Windows目錄下。下一步就是根據需要重新組織檔案系統的目錄結構。
II.組織檔案系統的目錄結構的途徑在於修改project.dat檔案,添加檔案目錄結構的描述。
描述的文法如下:
root:-Directory("<目錄名>") 表示在root目錄(\)下建立目錄
Directory("\<目錄名>"):-Directory("<子目錄名>") 表示在指定目錄下建立子目錄
Directory("\("<目錄名>\<子目錄名>"):-File("<檔案名稱>.<副檔名>","\Windows\<檔案名稱>.<副檔名>")
表示在指定目錄下建立\Windows目錄下檔案的拷貝,顯示名稱是<檔案名稱>.<副檔名>。
(記得上面提到打包的檔案在\Windows目錄下嗎?呵呵,我想你明白了)
III.應用程式並不一定需要打包進NK.bin
假定程式在硬碟的某個位置,
如\硬碟\MyApp\MyApp.exe,那麼只需建立捷徑檔案,連結指向\硬碟\MyApp\MyApp.exe就是了
IV.相關PB42說明主題
Adding a File to an Operating System
Creating a Shortcut File
and Adding It to the OS
Organizing Files Within an OS
整個過程簡單來說就是,
想清楚應用程式將會出現在哪個目錄下,建立正確的捷徑檔案,修改目標系統目錄組織配置,
最後將應用程式和相應的捷徑檔案打包進NK.bin。
二、註冊表
1.配置project.bib或者
添加User Feature,以將<你的程式>含入NK.bin
請參考《讓程式在Windows CE系統啟動時自動運行
-捷徑》
2.配置platform.reg或者common.reg,在[HKEY_LOCAL_MACHINE\init]段添加如下類似
內容:
"LaunchXX"="<你的程式>"
"DependXX"=hex:YY,ZZ,...
其中XX是十進位的數字,
表示<你的程式>的啟動順序標識;YY,ZZ是Least Significant的十六進位數字,表示<你的程式>所
依賴(先於<你的程式>運行)的程式的啟動順序標識。
例如:
"Launch80"="MyApp.exe"
"Depend80"=hex:1E,00
語意為程式MyApp.exe的啟動順序標識
是80,它依賴標識為30(即001E)的程式。
如果<你的程式>不依賴其他程式,那麼不需要添加
"DependXX"=hex:YY,zz,...指示;
如果<你的程式>依賴多個程式,那麼在"DependXX"指示中指明;
eg.
"Launch80"="MyApp.exe"
"Depend80"=hex:0A,00,1E,00
語意為MyApp.exe程式的啟動依賴
標識為10和30的程式。
3.PlatformBuilder IDE->Build->MakeImage,產生新的NK.bin
說明:
1.如果<你的程式>是別的程式所依賴的程式,那麼在<你的程式>的代碼中需要添加如下代碼
SignalStarted(XX);
以通告作業系統<你的程式>已經運行,否則依賴<你的程式>的程式將不會運行。
一般SignalStarted加在InitInstance成員函數的最後(MFC CE)或者while(GetMessage(...))之前
(C SDK)
2.不要重複使用啟動順序標識,依賴方程式的啟動順序標識應大於被依賴方程式。
3.如果不想讓<你的程式>包含在NK.bin中,同時又想讓它自動啟動,那麼請明確指出<你的程式>的
路徑,同時確保檔案系統驅動程式先運行。
eg.
"Launch80"="\Hard Disk\MyApp\MyApp.exe"
"Depend80"=hex:...