用DELPHI編寫NT服務時,如何指定依存關係?

2021-04-27 11:55:40 字數 1137 閱讀 2165

q:我用delphi編寫了乙個nt的服務,且設定為自動啟動,可每次伺服器重啟後,該服務不能自動啟動。我感覺是由於該服務啟動時使用了sqlserver資料庫,可能由於sqlserver服務沒有啟動完成,導致該服務無法啟動,所以我想指定該服務的依存關係,讓它在sqlserver服務啟動完畢後再啟動,如何做?

a:

方法一、

procedure   tfooparserservice.servicebeforeinstall(sender:   tservice);   

begin   

self.dependencies.add;   

self.dependencies.items[0].name   :=   'mssqlserver';   

end;

方法二、

在service的create事件中新增   

tdependency(dependencies.add).name:='mssqlserver';

q:如何除錯?

a:

除錯是可以的:   

最簡單的就是先作成程式,除錯沒有問題了再轉成服務。 當然如果你不想這樣的話當然也可以,方法如下:

首先,在"run|parameters..."視窗「parameters」中使用引數/install執行服務程式,此時服務安裝到系統中,然後用服務管理器啟動安裝的服務,回到delphi中,到選單run-->attach   process中,attach到服務的exe程式即可,如果找不到這個exe,選擇下面的「show   system   processes」。此時可以正常下斷點等。   

需要注意的是:   

1.attach會跳出乙個錯誤的視窗,不要管它,關閉後直接f4即可。   

2.如果不除錯後,要把/install換成/uninstall,解除安裝服務,然後把parameters引數清空。反正只要提示大概意思是「服務已經存在」或者「服務不存在」,就要看parameters的引數值。   

3.再次除錯/install的時候,要把剛剛開啟的服務管理器視窗關閉,不然會提示大概意思是「服務已經被禁止」。   

編寫NT服務

編寫nt服務 先介紹一下什麼是nt服務,實際上就是乙個可以在系統啟動時自動在一定身份下啟動的,伴隨著系統長期存在的程序.乙個nt服務有三部分構成 1 service control manager scm 每個win nt 2k都有乙個scm,他存在於service.exe中.2 服務本身 乙個服務...

用Delphi編寫Win2000服務程式

一 win2000 服務簡介 服務程式 是一種執行於 winnt 的後台程式,每個服務程式 中可能包含若干個服務 service 每個服務就是其中的乙個執行緒 該服務也可以建立多個子執行緒 採用服務,應用程式可以獲得特殊的許可權,而且不會被使用者通過 win2000 的任務管理器直接結束程式,所以服...

Delphi 編寫系統服務

新建乙個類,例如名字叫做tnoticethread,繼承自tthread,並重寫protected過程execute。在noticeservice的類定義中新增乙個noticethread物件。找到屬性的events選項卡,分別新增onstart,onpause,oncontinue,onstop事...