用delphi編寫windows服務(wù)程序

用delphi編寫windows服務(wù)程序

ID:14260066

大?。?34.00 KB

頁數(shù):18頁

時間:2018-07-27

用delphi編寫windows服務(wù)程序_第1頁
用delphi編寫windows服務(wù)程序_第2頁
用delphi編寫windows服務(wù)程序_第3頁
用delphi編寫windows服務(wù)程序_第4頁
用delphi編寫windows服務(wù)程序_第5頁
資源描述:

《用delphi編寫windows服務(wù)程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、用Delphi編寫Windows服務(wù)程序(1)一、Windows服務(wù)簡介  服務(wù)程序(ServiceApplication)是一種運行于WinNT的后臺程序,每個服務(wù)程序(ServiceApplication)中可能包含若干個服務(wù)(Service),每個服務(wù)就是其中的一個線程(該服務(wù)也可以創(chuàng)建多個子線程)。采用服務(wù),應(yīng)用程序可以獲得特殊的權(quán)限,而且不會被用戶通過Win2000的任務(wù)管理器直接結(jié)束程序,所以服務(wù)常常用來實現(xiàn)一些特殊的目標(biāo)?! ⊥ㄟ^Win2000控制面板中的服務(wù)管理工具,我們可以設(shè)置/查看服務(wù)的特性: ?。?)服務(wù)名稱;(2)顯示名

2、稱;(3)描述;(4)啟動類型;(5)依賴關(guān)系;  其中,服務(wù)名稱是標(biāo)識給服務(wù)的。  以Win2000的C:WINNTSystem32services.exe程序為例子,該Exe文件對應(yīng)一個ServiceApplication,是該服務(wù)程序的可見實體;該exe中包含多個服務(wù)(Service),例如Alerter,Dhcp(DHCPClient),Messenger等。當(dāng)我們結(jié)束一個服務(wù)的時候,該服務(wù)所在的ServiceApplication中的其他服務(wù)并沒有被終止?! ≡贒elphi中,Borland的工程師為我們提供了TServiceA

3、pplication,TService,TServiceThread等類,封裝了大量細節(jié),簡化了服務(wù)程序的開發(fā)。二、TServiceApplication  在Delphi中,類TServiceApplication就對應(yīng)上述的ServiceApplication。利用Delphi的開發(fā)環(huán)境,我們新建一個ServiceApplicationProject,同時就創(chuàng)建了一個繼承自TService的類。項目文件中的Application對象就是一個TServiceApplication實例。每個TServiceApplication包含若干個TSe

4、rvice對象,正好對應(yīng)上述的服務(wù)程序和服務(wù)之間的數(shù)量關(guān)系。  通過閱讀TServiceApplication和TService類的定義,可以得知,TServiceApplication從TComponent類繼承而來,TService從類TDataModule基礎(chǔ)而來,Application對象負責(zé)各個TService對象的Create和Destroy。跟蹤下列代碼  Application.CreateForm(TService1,Service1);  可以發(fā)現(xiàn)創(chuàng)建的TService對象的Owner都是Application對象;在VCL

5、FrameWork中Owner總是負責(zé)Destroy各個Component對象(VCL的TComponent類采用了Composite模式),所以TServiceApplication也將Destroy各個TService對象?! ∠旅娓橳ServiceApplication.Run的代碼,可以發(fā)現(xiàn)TServiceApplication首先解析運行參數(shù),實現(xiàn)了服務(wù)的Install和Uninstall。然后,初始化一個ServiceStartTable數(shù)組,該數(shù)組包含了各個service對象的服務(wù)名稱和運行入口;最后創(chuàng)建一個TServiceSt

6、artThread對象,該對象是一個線程對象,從線程調(diào)用API:StartServiceCtrlDispatcher來啟動ServiceStartTable中指定的若干個服務(wù);而ServiceApplication主線程就不斷循環(huán),處理消息,比如接收請求來停止/暫停某個服務(wù)。三、TService  TService類繼承自類TDataModule,這意味著我們可以加入大量的VCL控件,實現(xiàn)豐富的功能。此外,我們還可以處理OnStart,OnPause,OnStop,OnContinue,OnCreate,OnShutDown等事件。其中需要說明

7、的是:OnStop表示該服務(wù)被停止;而OnShutDown表示該ServiceApplication停止運行,這意味著其他服務(wù)也被終止了;兩者含義是不一樣的。?  前面講過,ServiceApplication通過調(diào)用StartServiceCtrlDispatcher來啟動各個服務(wù)。StartServiceCtrlDispatcher啟動TService的入口,該入庫就是TService.Main。TService.Main首先注冊該服務(wù),然后調(diào)用TService.DoStart。TService.DoStart創(chuàng)建一個內(nèi)部TServiceT

8、hread成員對象,這是一個線程對象;考察TServiceThread.Execute可以得知,當(dāng)我們處理的TService1.OnExecute,那

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。