wince 自动启动程序设置
這是我在做wince6的時(shí)候?yàn)樵O(shè)置自啟動(dòng)而尋找的方法。我發(fā)現(xiàn)公司定的這個(gè)設(shè)備在“Program Files”和windows文件夾下放置的東西在機(jī)子重啟之后就什么都沒(méi)有了。我只有使用注冊(cè)表測(cè)試,發(fā)現(xiàn)重啟后還存在,因此我用注冊(cè)表方式設(shè)置了自啟動(dòng)。而在這個(gè)過(guò)程中,我發(fā)現(xiàn)如果程序放在SD卡內(nèi)是不行的,只有放在nand才行。為什么放在SD卡內(nèi)不可以自啟動(dòng),原因在我下面搜集的幾篇文章中找到了,原來(lái)SD卡是在自啟動(dòng)程序之后才加載了驅(qū)動(dòng)運(yùn)行起來(lái)的。
?
?
?
wince?自動(dòng)啟動(dòng)程序設(shè)置
| 修改注冊(cè)表[HKEY_LOCAL_MACHINE\init] |
?
如何讓應(yīng)用程序隨wince操作系統(tǒng)自啟動(dòng)
????如何讓應(yīng)用程序隨wince操作系統(tǒng)自啟動(dòng)呢?我搜索了一下,網(wǎng)上有不少方法,但有時(shí)也會(huì)有疏漏的地方,通常一點(diǎn)小小的錯(cuò)誤也會(huì)導(dǎo)致整個(gè)環(huán)節(jié)不能進(jìn)行下去。在此,我想跟大家共同探討一下,歡迎大家指正。
首先,假設(shè)你的應(yīng)用程序?yàn)?#xff1a;MyApp.exe。
方法一:主要思想:將應(yīng)用程序及其快捷方式也添加到映像里,再將快捷方式添加到StartUp目錄下,這樣當(dāng)系統(tǒng)運(yùn)行后應(yīng)用程序就能自動(dòng)運(yùn)行。
步驟:
1先保證原工程文件是可以編譯成功的。假設(shè)編譯好的nk.bin文件所在文件夾為xxx_Relase。
2創(chuàng)建快捷方式文件MyApp.lnk,文件內(nèi)容如下:
10#”\Windows\MyApp.exe”(注意引號(hào))
3在pb中修改project.bib文件,在FILES Section添加:
MyApp.exe ?? $(_FLATRELEASEDIR)\MyApp.exe NK H
MyApp.lnk ?? $(_FLATRELEASEDIR)\MyApp.lnk?? NK H
(注:$(_FLATRELEASEDIR)表示xxx_Relase文件夾;NK后面的H表明加入到nk.bin中的文件為隱藏屬性)
4?把快捷方式添加到StartUp目錄下,具體為:
修改工程的project.dat文件,添加如下內(nèi)容:
Directory("\Windows\Startup"):-File("MyApp.lnk","\Windows\MyApp.lnk")
5從道理上講,如果這時(shí)把MyApp.exe和MyApp.lnk拷貝到xxx_Relase文件夾下,然后Build->MakeImag的話就會(huì)把你的應(yīng)用程序添加到NK里,但實(shí)際情況并非如此,經(jīng)我實(shí)驗(yàn),先要把工程文件全部rebuild一下,我這兒是sysgen了一下,如果你設(shè)置了在編譯完后MakeImage?的話,會(huì)有錯(cuò)誤提示你未在你的磁盤上找到MyApp.exe。不用管它。把MyApp.exe和MyApp.lnk文件拷貝到xxx_Relase文件夾下,然后MakeImage一下(記住此時(shí)千萬(wàn)不能再rebuild了,否則會(huì)前功盡棄),把生成的NK.bin燒寫到flash里,這樣就可以看到你的應(yīng)用程序MyApp.exe自啟動(dòng)了.
方法二:主要思想:將應(yīng)用程序添加到映像里,然后用你的應(yīng)用程序直接替換Wince的桌面程序。
步驟:
1.?像方法一一樣把你的應(yīng)用程序添加到映象里。
????提示:要查看添加映象是否成功,可以在操作系統(tǒng)啟動(dòng)后,看一下windows目錄下是否有你的應(yīng)用程序MyApp.exe(先要設(shè)置為可以查看系統(tǒng)文件和隱藏文件)。
2.修改shell.reg(若在pb里找不到,可以到xxx_Relase文件夾下找):
[HKEY_LOCAL_MACHINE\init]
"Launch50"="explorer.exe"
"Depend50"=hex:14,00, 1e,00
把這個(gè)explorer.exe改成你的應(yīng)用程序(比如:MyApp.exe)。
3. MakeImage一下(還是記住不能再build了),把生成的NK.bin燒寫到flash里,這樣就可以看到你的應(yīng)用程序MyApp.exe自啟動(dòng)了.
這樣做的好處是啟動(dòng)的時(shí)候wince的桌面程序都不會(huì)啟動(dòng)了,壞處是當(dāng)你把應(yīng)用程序關(guān)閉的時(shí)候由于原wince桌面程序的丟失而會(huì)使機(jī)器死機(jī)。
方法三:主要思想:將應(yīng)用程序添加到映像里,然后修改注冊(cè)表,讓應(yīng)用程序自啟動(dòng)。這回不替換wince的桌面程序,而是讓wince像加載桌面一樣加載你的應(yīng)用程序,效果跟方法一是一樣的。
步驟跟方法二是一樣的,只是第二步稍有不同:
在shell.reg文件中[HKEY_LOCAL_MACHINE\init]之下添加如下語(yǔ)句:
"Launch80"="MyApp.exe"
"Depend80"=hex:1E,00
說(shuō)明:"Depend80"=hex:1E,00用來(lái)設(shè)置啟動(dòng)順序和依賴程序,若你的應(yīng)用程序不依賴于其它程序,這句可以不加。
另外,應(yīng)用程序也不一定就要加載到映象文件里,可以直接從u盤,硬盤,sd卡等加載,但是要先保證你的應(yīng)用程序自啟動(dòng)時(shí)系統(tǒng)已能正確識(shí)別掛接的u盤,硬盤,sd卡等。
?
有兩個(gè)地方啟動(dòng)程序: 1. 在注冊(cè)表HKLM\Init上加入鍵值:Launch99="你的程序名(可以是絕對(duì)路徑)",如果你的程序要依賴別的程序,還要加入:Depend99=依賴程序的啟動(dòng)序號(hào)(可以看看Init下其它程序的啟動(dòng)順序) 2.好像是在HKLM下有個(gè)WBT,里面有個(gè)地方也可以加入啟動(dòng)程序,每次注銷都會(huì)重新啟動(dòng)一遍,而Init只有在重新開(kāi)機(jī)時(shí)才啟動(dòng)。 你要啟動(dòng)的程序,可以放在你的flash卡上(Init需要加入絕對(duì)路徑),或者加入bib文件,編譯進(jìn)內(nèi)核。?
??WinCE?應(yīng)用程序開(kāi)機(jī)自啟動(dòng)方法
近日在開(kāi)發(fā)過(guò)程中遇到WinCE應(yīng)用程序開(kāi)機(jī)自動(dòng)運(yùn)行的問(wèn)題,在網(wǎng)上找了找,發(fā)現(xiàn)大概有以下三種方法:
?
1、?將應(yīng)用程序和應(yīng)用程序快捷方式添加到映像里,再將快捷方式添加到StartUp目錄下,這樣當(dāng)系統(tǒng)運(yùn)行后應(yīng)用程序就能自動(dòng)運(yùn)行;
?
2、?直接替換Wince的SHELL,即修改注冊(cè)表:
?
[HKEY_LOCAL_MACHINE\init]
"Launch50"="explorer.exe"
"Depend50"=hex:14,00, 1e,00
?
把這個(gè)explorer.exe改成你的應(yīng)用程序(比如:MyApp.exe);
?
3、?把應(yīng)用程序加入到映像,修改注冊(cè)表:
[HKEY_LOCAL_MACHINE\init]
"Launch80"="MyApp.exe"
"Depend80"=hex:1E,00
?
可以設(shè)置啟動(dòng)順序和依賴程序;
?
以上方法都可行,但是都存在一個(gè)問(wèn)題,就是應(yīng)用程序是集成到NK里面的,也就是說(shuō)每次升級(jí)應(yīng)用程序都要重新編譯下載內(nèi)核,很麻煩,尤其在程序調(diào)試階段,大家都希望把應(yīng)用程序放在SD卡上,這樣更新起來(lái)比較容易;據(jù)說(shuō)通過(guò)第三種方法可以實(shí)現(xiàn),即修改"Launch80"="MyApp.exe"為"Launch80"="\STDCard\MyApp.exe"( STDCard為SD卡目錄),但是我試了一下沒(méi)有成功,因?yàn)?span style="font-family:Times New Roman">Launch80運(yùn)行時(shí)SD卡的文件驅(qū)動(dòng)還沒(méi)有加載,找不到MyApp.exe文件。同樣,采用快捷方式加載SD卡里的應(yīng)用程序也不可行。
所以我采用了另一種方法,自己編了一個(gè)小程序,比如叫ShellExe.exe,將此程序加入到映像里,通過(guò)StartUp快捷方式調(diào)用ShellExe,ShellExe再去調(diào)用SD卡里的應(yīng)用程序,具體實(shí)現(xiàn)步驟如下:
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的可執(zhí)行文件,此段代碼主要功能是查找指定的應(yīng)用程序,然后執(zhí)行;下面這段代碼可以保證在SD卡文件系統(tǒng)正確加載后才去執(zhí)行應(yīng)用程序;
while(iCount--)
{
hd=::FindFirstFile(lpCmdLine,&fd);
Sleep(500);
if(INVALID_HANDLE_VALUE!=hd) break;
}
文件的名稱和路徑由命令行參數(shù)指定:
ShExeInfo.lpFile=lpCmdLine;2、?新建一個(gè)快捷方式,如Autorun.lnk,按如下方式編輯其內(nèi)容:
?
21#\windows\shellexe.exe \stdcard\MyApp.exe其中\stdcard\MyApp.exe應(yīng)用程序的絕對(duì)路徑;
?
3、?將MyApp.exe和Autorun.lnk添加到NK里,方法是在project.bib文件內(nèi)加入如下內(nèi)容:
?
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里加入如下內(nèi)容:
?
Directory("\Windows\Startup"):-File("Autorun.lnk","\Windows\Autorun.lnk")5、?選擇Make Image生成映像(當(dāng)然Build也可以,就是慢點(diǎn)兒),燒到FLASH里,開(kāi)機(jī)運(yùn)行,可以看到SD卡里的MyApp.exe被正確執(zhí)行。
?
總結(jié)
這種方法用起來(lái)比較方便,ShellExe.exe不用每次都重新編譯,只要根據(jù)應(yīng)用程序路徑修改Autorun.lnk即可,可以加載Flash、U盤、SD卡里的應(yīng)用程序。調(diào)試及升級(jí)應(yīng)用程序就不用重新燒寫內(nèi)核了。
?
WinCE自啟動(dòng)Shell的問(wèn)題
WinCE開(kāi)機(jī)即運(yùn)行定制的Shell是很多系統(tǒng)的基本要求,有時(shí)還需要屏蔽WinCE自帶的Shell。WinCE中程序的自啟動(dòng),一般有兩個(gè)實(shí)現(xiàn)方法,修改注冊(cè)表和添加自啟動(dòng)快捷方式。修改注冊(cè)表比較方便,如下:
?
???????[HKEY_LOCAL_MACHINE\init]
?????????"Launch70"="MyApp.exe"
?????????"Depend70"=hex:14,00,1e,00
?
??????只要將MyApp.exe打包到NK,并在platform.reg中加入上面的注冊(cè)表信息,這樣WinCE啟動(dòng)時(shí)便會(huì)自動(dòng)運(yùn)行該程序。但這時(shí)WinCE自帶的Shell總是先出來(lái),然后才運(yùn)行MyApp.exe,為了避免這種情況,我們可以將注冊(cè)表設(shè)置修改如下:
?
???????[HKEY_LOCAL_MACHINE\init]
?????????"Launch50"="MyApp.exe"
?????????"Depend50"=hex:14,00,1e,00
?
??????即將原來(lái)啟動(dòng)explorer.exe的值換為MyApp.exe。這樣WinCE啟動(dòng)時(shí)直接進(jìn)入定制的Shell,而不啟動(dòng)explorer.exe。但這時(shí)有可能引入了新問(wèn)題,如果定制的Shell是基于MFC編寫的,并且其中用到了如CFileDialog等類庫(kù)時(shí),就會(huì)出現(xiàn)意想不到的情況,如下圖所示:
?
上圖是在不啟動(dòng)Explorer.exe時(shí),嘗試導(dǎo)入注冊(cè)表文件出現(xiàn)的狀況截圖,而在啟動(dòng)explorer.exe時(shí)是沒(méi)有問(wèn)題的。這說(shuō)明CFileDialog在某種程度上依賴于explorer.exe,具體細(xì)節(jié)沒(méi)研究。但說(shuō)明不啟動(dòng)explorer.exe,基于MFC的Shell運(yùn)行時(shí)就可能會(huì)出問(wèn)題。所以explorer.exe必須啟動(dòng),但又不能出現(xiàn)WinCE界面。要解決這個(gè)問(wèn)題自然就想到修改explorer.exe了。WinCE5.0和WinCE6.0中,這一部分的代碼都是公開(kāi)的,在WinCE6.0中Shell的相關(guān)代碼在C:\WINCE600\PUBLIC\SHELL\OAK\HPC\EXPLORER\MAIN目錄下。
?
???????大致看了一下這一部分的代碼,發(fā)現(xiàn)只需修改如下兩個(gè)文件,就應(yīng)該能實(shí)現(xiàn)需求。
?
???????C:\WINCE600\PUBLIC\SHELL\OAK\HPC\EXPLORER\MAIN\desktop.cpp
?
+ expand sourceview plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
bool CDesktopWnd::Create()??
{??
?
????IShellFolder????*pSHF;??
????FOLDERSETTINGS fs;??
????RECT rc;??
????HRESULT hr = E_FAIL;??
??????
????// Get a shell folder for the desktop??
????hr = SHGetDesktopFolder(&pSHF);??
????if(hr || !pSHF)??
????????goto Cleanup;??
?
????// create a shell view for it??
????hr = pSHF->CreateViewObject(NULL, IID_IShellView, (LPVOID *)&_psv);??
????if(hr || !_psv)??
????????goto Cleanup;??
?
????fs.ViewMode = FVM_ICON;??
????fs.fFlags = FWF_DESKTOP | FWF_ALIGNLEFT | FWF_NOSCROLL;??
?
????//++changed by hjb??
????//將Desktop的窗口大小設(shè)為0??
????//SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN));??
????SetRect(&rc, 0, 0, 0, 0);??
????????//--changed by hjb??
??????
????// create the desktop's view window (no need to AddRef since CreateViewWindow does it)??
????hr = _psv->CreateViewWindow(NULL,??&fs, (IShellBrowser *)this, &rc, &_hWnd);??
????if(hr || !_hWnd)??
????{??
????????Release();??
????????goto Cleanup;??
????}??
?
????RegisterDesktop(_hWnd);??
?
Cleanup:??
????if(pSHF)??
????????pSHF->Release();??
?
???return (hr == S_OK);??????
}?
bool CDesktopWnd::Create()
{
?
????IShellFolder????*pSHF;
????FOLDERSETTINGS fs;
????RECT rc;
????HRESULT hr = E_FAIL;
???
????// Get a shell folder for the desktop
????hr = SHGetDesktopFolder(&pSHF);
????if(hr || !pSHF)
????????goto Cleanup;
?
????// create a shell view for it
????hr = pSHF->CreateViewObject(NULL, IID_IShellView, (LPVOID *)&_psv);
????if(hr || !_psv)
????????goto Cleanup;
?
????fs.ViewMode = FVM_ICON;
????fs.fFlags = FWF_DESKTOP | FWF_ALIGNLEFT | FWF_NOSCROLL;
?
????//++changed by hjb
????//將Desktop的窗口大小設(shè)為0
????//SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN));
????SetRect(&rc, 0, 0, 0, 0);
????????//--changed by hjb
???
????// create the desktop's view window (no need to AddRef since CreateViewWindow does it)
????hr = _psv->CreateViewWindow(NULL,??&fs, (IShellBrowser *)this, &rc, &_hWnd);
????if(hr || !_hWnd)
????{
????????Release();
????????goto Cleanup;
????}
?
????RegisterDesktop(_hWnd);
?
Cleanup:
????if(pSHF)
????????pSHF->Release();
?
???return (hr == S_OK);???
}
?
???????C:\WINCE600\PUBLIC\SHELL\OAK\HPC\EXPLORER\MAIN\explorer.cpp
?
+ expand sourceview plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
DWORD WINAPI CreateTaskBar(LPVOID pEvent)??
{??
????HANDLE hSyncEvent = *((HANDLE *) pEvent);??
????CTaskBar *pTaskBar = NULL;??
????HWND hwndTB = NULL;??
??????
????pTaskBar = new CTaskBar;??
??????
????//++added by hjb??
????//在創(chuàng)建任務(wù)欄時(shí)強(qiáng)制終止??
????if(pTaskBar)??
????{??
????????delete pTaskBar;??
????????SetEvent(hSyncEvent);??
????????return 0;??
????}??
????//--added by hjb??
???????
????if(!pTaskBar)??
????{??
????????SetEvent(hSyncEvent);??
????????return 0;??
????}??
?
????g_TaskBar = pTaskBar;??
????if(!pTaskBar->Register(g_hInstance))??
????{??
????????g_TaskBar = NULL;??
????????delete pTaskBar;??
????????SetEvent(hSyncEvent);??
????????return 0;??
????}??
?
????RegisterTaskBar(pTaskBar->GetWindow());??
????SetEvent(hSyncEvent);??
?
????DWORD dwRet = pTaskBar->MessageLoop();??
?
????delete pTaskBar;??
?
????return dwRet;??
}?
DWORD WINAPI CreateTaskBar(LPVOID pEvent)
{
????HANDLE hSyncEvent = *((HANDLE *) pEvent);
????CTaskBar *pTaskBar = NULL;
????HWND hwndTB = NULL;
???
????pTaskBar = new CTaskBar;
???
????//++added by hjb
????//在創(chuàng)建任務(wù)欄時(shí)強(qiáng)制終止
????if(pTaskBar)
????{
????????delete pTaskBar;
????????SetEvent(hSyncEvent);
????????return 0;
????}
????//--added by hjb
???
????if(!pTaskBar)
????{
????????SetEvent(hSyncEvent);
????????return 0;
????}
?
????g_TaskBar = pTaskBar;
????if(!pTaskBar->Register(g_hInstance))
????{
????????g_TaskBar = NULL;
????????delete pTaskBar;
????????SetEvent(hSyncEvent);
????????return 0;
????}
?
????RegisterTaskBar(pTaskBar->GetWindow());
????SetEvent(hSyncEvent);
?
????DWORD dwRet = pTaskBar->MessageLoop();
?
????delete pTaskBar;
?
????return dwRet;
}
?
修改完這兩處后,先編譯該目錄,然后再重新編譯整個(gè)系統(tǒng)(執(zhí)行Sysgen)應(yīng)該就可以了。Explorer.exe依然啟動(dòng),依然可以聽(tīng)到WinCE啟動(dòng)的聲音,但WinCE的界面已經(jīng)屏蔽掉了。此時(shí),基于MFC的Shell也能正常工作,如下圖所示:?
?
?
??????在實(shí)際操作時(shí),我沒(méi)有通過(guò)修改源代碼編譯來(lái)完成這個(gè)測(cè)試。因?yàn)樵诰幾gC:\WINCE600\PUBLIC\SHELL\OAK\HPC\EXPLORER\MAIN目錄時(shí),發(fā)現(xiàn)它只生成了explorer.lib。考慮到重新編譯整個(gè)系統(tǒng)的時(shí)間太長(zhǎng),所以直接修改了工程目錄下的explorer.exe的文件,MakeImg后測(cè)試的。這里應(yīng)該有快速編譯的方法,但目前不知怎么弄。
?
??????修改后,在WinCE6.0的模擬器中測(cè)試,達(dá)到了預(yù)想的效果。這樣就大概解決了基于MFC的Shell和Explorer.exe之間的矛盾,是不是有隱患還不清楚,目前看來(lái)沒(méi)問(wèn)題。
?
另外需要注意,修改public和private目錄下的文件時(shí),一定先做好備份,以免后患。??????????
??????修改后的WinCE6.0的explorer.exe及演示視頻的下載地址:
?
???????http://files.cnblogs.com/we-hjb/WinCE_Shell.rar
?
引用網(wǎng)址:http://www.cnblogs.com/we-hjb/archive/2008/12/28/1364070.html
?
?
HKEY_LOCAL_MACHINE\init\Launch80="\nandflash\em9161_xwj.exe"
?
[PB操作使用技巧]WinCE下直接啟動(dòng)應(yīng)用程序的方法
其實(shí)讓一個(gè)程序在wince里啟動(dòng)和windows里差不多,直接設(shè)置其為啟動(dòng)項(xiàng),這個(gè)有幾個(gè)方法。一個(gè)就是制作一個(gè)快捷方式,指向我們的應(yīng)用程序如app.exe,然后將快捷方式放到\windows\startup下面。
????步驟如下:(假設(shè)app.exe已經(jīng)拷貝到windows下面)
????1?在pb中創(chuàng)建一個(gè)文件,文件類型選txt,然后命名為.lnk后綴,假設(shè)名字為test.lnk
????2?編輯其內(nèi)容為: 16#\windows\app.exe。備注:前面的16是#?后面所有字符的總和,包括空格。Wince的幫助文檔上說(shuō)這么定義就行,但是我嘗試后,最后down到目標(biāo)機(jī)上面時(shí)提示找不到文件,在wince里查看這么創(chuàng)建的test.lnk的屬性,發(fā)現(xiàn)其指向\windows\app.exe后面還有兩個(gè)方框,因此不對(duì),我的解決方法是修改test.lnk的內(nèi)容為16#"\Windows\app.exe"
????3?編輯好lnk文件內(nèi)容后在pb中修改project.bib。在files段后面添加下面一行:(和添加別的文件到image中類似,見(jiàn)我的《WinCE中如何向image中添加文件》,也要在pb的flatform菜單的setting下添加build語(yǔ)句,不再贅述)
????????test.lnk $(_FLATRELEASEDIR)\test.lnk NK S
????在project.dat中增加下面一行:
?????????Directory("\Windows\startup"):-File("test.lnk","\Windows\test.lnk")
????這樣后系統(tǒng)啟動(dòng)后就會(huì)自動(dòng)啟動(dòng)我們的程序了。
???
????另外一種方法是編輯注冊(cè)表:在project.reg中添加如下內(nèi)容
????????[HKEY_LOCAL_MACHINE\init]
????????"Launch80"="app.exe"
????????"Depend80"=hex:14,00,1e,00
????這個(gè)是設(shè)定啟動(dòng)順序,launch后面的數(shù)字越大的越是后啟動(dòng),Depend80后面的指定依賴項(xiàng),為16進(jìn)制,上面的語(yǔ)句表明依賴項(xiàng)為launch20定義的device.exe和launch30中定義的gwes.exe,?注意Launch后面的數(shù)字范圍為0到99?,此范圍之外的將不會(huì)有效果。
????這樣兩種方法的效果都是系統(tǒng)都是系統(tǒng)先啟動(dòng)資源管理器explorer.exe(就是看到的默認(rèn)桌面),然后啟動(dòng)我們的程序,(如果利用taskman shell然后去掉任務(wù)欄那么效果更好)但是這樣還不夠,我們?nèi)绾尾伙@示桌面,直接顯示我們的程序呢?
????網(wǎng)上有人介紹的方法是去掉standard shell,但是我編譯總是報(bào)錯(cuò)。我采用的方法是替換注冊(cè)表中lauch50中的explorer.exe為我的app.exe,即搞定。
????修改注冊(cè)表的方法:先把帶KITL的系統(tǒng)跑起來(lái),在PB的TOOLS->Remote registry editor里修改,驗(yàn)證有效后,再去修改platfrom.reg,?或者自己寫個(gè)REG文件,然后在platform.reg里INCLUDE進(jìn)來(lái)SYSGEN后確認(rèn)PBWORKSPACE里相關(guān)項(xiàng)目的REL目錄里reginit.ini文件里包含了自己做的修改后make image然后DOWNLOAD下去就OK了。
????值得補(bǔ)充的是,我們前面介紹的步驟中那個(gè)修改平臺(tái)setting,添加語(yǔ)句的,是因?yàn)槲颐看味际侵匦?span style="font-family:Times New Roman">sysgen和build,如果只是簡(jiǎn)單的make image的話(都是pb中的build OS菜單下的命令),那么將直接用release中的內(nèi)容,因此也可以直接將文件放到release文件夾,然后改project.bib等實(shí)現(xiàn)往image中添加文件。?同樣,也可以直接修改release中的shell.reg中的launch50值為我們自己的程序(或者類似修改reginit.ini文件,reginit.ini文件存放有所有wince的靜態(tài)注冊(cè)表,來(lái)達(dá)到去掉桌面,直接啟動(dòng)我們程序的效果)。
注意,這么啟動(dòng)的程序,如果點(diǎn)擊關(guān)閉,就會(huì)死機(jī)的,因?yàn)闆](méi)有窗口運(yùn)行了。實(shí)際運(yùn)用中,當(dāng)然不會(huì)讓用戶關(guān)閉我們的程序,除非他一起關(guān)閉系統(tǒng)。
如果也需要build的話,可以通過(guò)往image中添加文件的方法將我們改好的shell.reg添加到release目錄
總結(jié)
以上是生活随笔為你收集整理的wince 自动启动程序设置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WinCE 控制面板的创建
- 下一篇: 微软神速!Windows 11的2023