資源描述:
《用delphi7編寫windows服務程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、用delphi7編寫windows服務程序總結(jié)一、服務程序的創(chuàng)建delphi編寫服務程序非常簡單,點擊菜單File->New->Other->New屬性頁->ServiceApplication,系統(tǒng)自動會創(chuàng)建基本的代碼。這里需要說明的是,在“New屬性頁”中還有一個Service,這個Service和ServiceApplication還是有區(qū)別的,應該說ServiceApplication的范圍大,它可以包含幾個Service。一個ServiceApplication可以創(chuàng)建幾個Service,service繼承自TService,界面表現(xiàn)和TDataModel類
2、似,做過數(shù)據(jù)庫的朋友肯定都不陌生,區(qū)別是TDataModel是用來放數(shù)據(jù)庫連接及操作組件的容器,而TService則是可以存放很多沒有界面的組件,如indy的IDtcpclient等。二、重要屬性及事件說明屬性:DisplayName顯示名稱Name名稱,當你用命令提示符來啟動、停止服務時,就需要用到Interactive與界面交互的選項事件:OnCreate:類似于Tform的OnCreateOnDestroy:類似于Tform的OnDestroyOnExecute:非常重要,一般寫成下面whilenotTerminateddobeginSleep(10);Serv
3、iceThread.ProcessRequests(False);end;OnPause:服務暫停OnShutdown:不太清楚OnStart:服務啟動,重要OnStop:服務停止,重要三、服務的依賴關(guān)系因為我的服務是要連接數(shù)據(jù)庫的,所以必須要等sqlserver的服務起來之后,我才能起來,這樣才能連接數(shù)據(jù)庫,因此這里面有個依賴關(guān)系的問題??梢栽趯傩訢ependencies中增加一項,選擇MSSQLSERVER。四、服務與界面的通訊服務也是可以創(chuàng)建form的,只是只是這個窗口,在服務啟動時顯示,服務停止后就關(guān)閉了。而我想做一個就象sqlserver2000的服務管理器
4、哪樣的界面,不論服務啟動是否,都可以顯示,而且也可以在界面上直接控制服務。所以我就又建了一個應用,而這個應用和原來服務的通訊用自定義消息來傳遞。比如,有人通過控制面板停止服務了,服務必須通知界面上的狀態(tài)。Delphi獲取Windows系統(tǒng)服務的狀態(tài)functionServiceGetStatus(sMachine,sService:string):DWord;varschm,schs:SC_Handle;ss:TServiceStatus;dwStat:DWord;begindwStat:=0;schm:=OpenSCManager(PChar(sMachine),N
5、il,SC_MANAGER_CONNECT);if(schm>0)thenbeginschs:=OpenService(schm,PChar(sService),SERVICE_QUERY_STATUS);if(schs>0)thenbeginif(QueryServiceStatus(schs,ss))thendwStat:=ss.dwCurrentState;CloseServiceHandle(schs);end;CloseServiceHandle(schm);end;Result:=dwStat;end;{判斷某服務是否安裝,未安裝返回true,已安裝返回f
6、alse}functionServiceUninstalled(sMachine,sService:string):boolean;beginResult:=0=ServiceGetStatus(sMachine,sService);end;{判斷某服務是否啟動,啟動返回true,未啟動返回false}functionServiceRunning(sMachine,sService:string):boolean;beginResult:=SERVICE_RUNNING=ServiceGetStatus(sMachine,sService);end;{判斷某服務是否停
7、止,停止返回true,未停止返回false}functionServiceStopped(sMachine,sService:string):boolean;beginResult:=SERVICE_STOPPED=ServiceGetStatus(sMachine,sService);end;Delphi如何停止、啟動windows系統(tǒng)服務//下面是寫了一個啟動服務的函數(shù)StartService,用來啟動服務。。。functionStartService(AServName:string):Boolean;//useWinSvcvarSCManag