天天看點

Wince6.0系統啟動後直接運作應用程式的實作與問題

        最近在做項目程式的初始化配置,需要實作開機自啟動、程式初始化配置等等。在網上搜了下,要實作WINCE系統啟動後直接運作程式,有三種方法,這裡主要是結合我的實際經曆來闡述一下值得注意的一些問題。

    1、不管是哪種方法,首先都得把應用程式app.exe放入NK映像中,在project.bib中添加

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

備注:①project.bib檔案主要是說明需要打包進鏡像檔案的wince檔案,和工程相關的配置都放在這裡。該檔案中主要包含MODULES和FILES項,對于.dll和.exe檔案放在MODULES下面,而其他檔案,比如配置檔案.cfg,則放在FILES下面。

      ②$(_FLATRELEASEDIR)是指工程下的xxx_Release目錄,是以在Make Image前需要把app.exe拷貝到該目錄下,比如我的目錄是C:\WINCE600\OSDesigns\S3C6410_DEMO\S3C6410_DEMO\RelDir\Samsung_SMDK6410_Release。

      ③放入到NK中的檔案,在完成系統燒入之後,檔案位于\Windows\目錄下,且檔案均為隻讀檔案。是以,如果你希望在第一次啟動程式時對程式進行配置,就不行了,因為無法寫配置檔案。這裡我更改了一個思路來實作的,就是在第一次啟動應用程式時檢測有沒有配置檔案,沒有則建立并進行相關配置寫入。

      ④對于③中提出的建立并寫檔案的方法,需要注意的是檔案不能儲存在\Windows\根目錄下,因為每次重新開機後,你的檔案都會丢失,必須把檔案放到\NandFlash中。隻有随NK映像一起燒入的檔案才不會在重新開機後丢失,對于隻讀的配置檔案可以采用這種方法。

      ⑤在Platform Builder下輕按兩下project.bib進行上述添加後,是需要重新sysgen一下的,如果不想浪費時間來sysgen,則需要把該檔案拷貝到xxx_Release目錄下,因為我們修改的不是xxx_Release目錄下的檔案。比如我修改的project.bib是位于C:\WINCE600\OSDesigns\S3C6410_DEMO\S3C6410_DEMO\Wince600\SMDK6410_ARMV4I\OAK\files,需要将其拷貝到C:\WINCE600\OSDesigns\S3C6410_DEMO\S3C6410_DEMO\RelDir\Samsung_SMDK6410_Release,然後重新Make Image即可。

    2、三種自啟動的方法:

    ①建立一個快捷方式,指向app.exe應用程式,然後将快捷方式放到\Windows\startup下。

    在Platform Builder中建立一個txt檔案,命名為.lnk字尾,比如為test.lnk。編輯其内容為: 16#“\windows\app.exe“。前面的16是# 後面所有字元的總和,包括空格。最後如上述1所述,在project.bib中添加

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

在project.dat中添加:

       Directory("\Windows\startup"):-File("test.lnk","\Windows\test.lnk") 

同樣注意,需要将修改的project.bib和project.dat,還有test.lnk、app.exe拷貝到xxx_Release目錄下,然後重新Make Image。

備注:project.dat中主要是對檔案系統、目錄和檔案配置設定表的描述,可在裡面實作相關目錄的建立和檔案的拷貝。比如:

Directory("\Nandflash"):-Directory("Config")

表示在\NandFlash根目錄下建立Config目錄

Directory("\Windows\startup"):-File("test.lnk","\Windows\test.lnk")

表示将\Windows\test.lnk拷貝到\Windows\startup目錄下,檔案名命名為test.lnk

    ②修改shell.reg的檔案,在[HKEY_LOCAL_MACHINE\init]中添加Launch80和Depend80,如下所示:

Wince6.0系統啟動後直接運作應用程式的實作與問題

備注:這個是設定啟動順序,launch後面的數字越大越是後啟動,Depend80後面的指定依賴項,為16進制,上面的語句表明explorer.exe依賴項為launch20定義的device.exe和launch30中定義的gwes.exe, app.exe需要依賴gwes.exe和explorer.exe。注意Launch後面的數字範圍為0到99 ,此範圍之外的将不會有效果。 

該方法在啟動時會先看到桌面,然後才啟動應用程式app.exe。如果将Depend80的依賴改為1e 00 ,在很難看到桌面,但是啟動應用程式後,會出現工作列,破壞了程式的全屏顯示。

    ③修改shell.reg中的launch50,不啟動exploerer.exe,這樣做的後果是如果程式退出,就會當機。在程式調試階段最好别用這種方法了,因為你可能随時要退出來運作其他測試程式。

Wince6.0系統啟動後直接運作應用程式的實作與問題

同樣需要注意的是,在修改shell.reg檔案後,如果不想重新sysgen,必須将其拷貝到xxx_Release目錄下,然後重新Make Image。