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事...