資源描述:
《COM服務(wù)程序相關(guān)資料》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、環(huán)境:Windows2003,VC6.0摘要:從建立一個COM服務(wù)程序入手,然后將一個MFC項(xiàng)目改造成服務(wù)程序,最后讓這一程序在啟動時可以顯示圖形界面。關(guān)鍵字:windows服務(wù)程序COM服務(wù)程序開機(jī)前啟動NT服務(wù)與桌面交互
一、什么是windows的服務(wù)程序?可以使用下面的幾種方法看到它。1.打開控制面板,然后是管理工具,里面有一個“服務(wù)”,雙擊后打開;2.或者是通過輸入命令的方式,打開開始菜單,點(diǎn)擊運(yùn)行,輸入mmcservices.msc(mmc可省略),也可打開;環(huán)境:Windows2003,VC6.0摘要:從建立一個COM服務(wù)程序入手,然后將一個MFC項(xiàng)目改造成服務(wù)程序,
2、最后讓這一程序在啟動時可以顯示圖形界面。關(guān)鍵字:windows服務(wù)程序COM服務(wù)程序開機(jī)前啟動NT服務(wù)與桌面交互
一、什么是windows的服務(wù)程序?可以使用下面的幾種方法看到它。1.打開控制面板,然后是管理工具,里面有一個“服務(wù)”,雙擊后打開;2.或者是通過輸入命令的方式,打開開始菜單,點(diǎn)擊運(yùn)行,輸入mmcservices.msc(mmc可省略),也可打開; 我們會在打開的頁面中看到一個大的列表,標(biāo)題欄上包含有名稱、描述、狀態(tài)、啟動類型、登錄身份等項(xiàng)。其中在狀態(tài)一欄中顯示為“已啟動”的是系統(tǒng)中已經(jīng)啟動了的服務(wù)。我們先看一下服務(wù)的屬性。舉個例子,找到PrintSpooler這一
3、名稱,然后用右鍵在上面點(diǎn)擊,選擇“屬性”,可以看到它所執(zhí)行的命令行是C:WINDOWSsystem32spoolsv.exe,按下停止后,任務(wù)管理器中spoolsv.exe進(jìn)程退出。我們所見到的這個列表就是服務(wù)程序的集中地,每一項(xiàng)就是一個服務(wù)程序。
上面這些標(biāo)為自啟動的服務(wù)程序隨系統(tǒng)一起啟動。它與一些修改注冊表:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun 項(xiàng),及類似注冊表項(xiàng)的程序不同的是,即使用戶沒有登錄到系統(tǒng)中,它們也是會運(yùn)行的,或者說它們在系統(tǒng)登錄前運(yùn)行。二、怎么建立自己的服務(wù)程序?
4、 每一個服務(wù)程序?qū)?yīng)注冊表項(xiàng)HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices下的一個子項(xiàng)。因此我們可以通過增加注冊表項(xiàng)的方式增加服務(wù)程序。比如,我現(xiàn)在要增加一個test1服務(wù)程序,對應(yīng)的可執(zhí)行文件是c:test1.exe。那么我要增加如下注冊表項(xiàng):1.[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices]下增加子項(xiàng)test1;2.test1下增加:
字符串型:"Description"="測試服務(wù)1"
字符串型:"DisplayName"="test1-displayn
5、ame"
DWORD型:"ErrorControl"=dword:00000001
可擴(kuò)充字符串值(即文件所在路徑):
"ImagePath"=hex(2):43,00,3a,00,5c,00,74,00,65,00,73,00,74,00,31,00,2e,00,65,00,
78,00,65,00,00,00
字符串型:"ObjectName"="LocalSystem"
DWORD型,值為3表示是手動:"Start"=dword:00000003
DWORD型:"Type"=dword:000000201.test1下增加子項(xiàng):
[HKEY_LOCAL_MACHINESY
6、STEMCurrentControlSetServicestest1Security]
里面的鍵值從其他的服務(wù)程序注冊表值中復(fù)制。 如果test1這一程序只是一個普通的win32程序,那么這樣做了之后還是不行,服務(wù)程序有它自己的一些結(jié)構(gòu)特點(diǎn)。那么怎么編寫這些服務(wù)程序?
建立一個服務(wù)程序的最簡單的方法是用VC中的ATLCOM向?qū)АV鞑藛沃羞x擇新建,然后選Projects中的ATLCOMAppWizard,輸入一個項(xiàng)目名,選擇了所在目錄后,點(diǎn)OK按鈕,在出現(xiàn)的對話框中選擇Service(EXE),點(diǎn)Finish即可。然后編譯生成test1.exe。
運(yùn)行test1.e
7、xe/regserver可以注冊程序?yàn)榉?wù),test1.exe/unregserver是取消注冊。test1.exe運(yùn)行時的參數(shù)是在:
Project->Settings->Debug->Programarguments中設(shè)置。三、怎么在建立的服務(wù)程序中加入自己的代碼?我們看一下剛才生成的test1項(xiàng)目的結(jié)構(gòu)。
我們看到test1有一個類CServiceModule和一些Globals的內(nèi)容。Globals包括一個_tWinMain函數(shù),也就是程序的入口,其中使