2013-07-02 47 views
1

我如何確保服務永遠不會因任何原因而停止
除非用戶停止服務。
我試過這個,但沒有成功。任何異常不間斷服務

OnExecute:

Count := 0; 
while not Terminated do 
begin 
    Inc(Count); 
    While Count >= SecBetweenRuns do 
    Begin 
    Try 
     Count := 0; 
     ... 
    Except 
     on E: exception do 
     Begin 
     JFCLogFile1.LogText := E.Message; 
     Break; 
     End; 
    End; 
    End; 
    Sleep(1000); 
    ServiceThread.ProcessRequests(False); 
end; 

如果發生任何異常服務停止工作,並且必須手動重新啓動它。
我想打破循環,並在異常發生時重新開始,沒有任何用戶干預。

+0

你顯示的代碼有什麼問題?它不符合你的要求? –

+0

@RemyLebeau我已經修改了問題 –

+0

你已經知道答案 - 使用'try/except'塊。那麼究竟是什麼問題呢?至少,您需要將'ServiceThread.ProcessRequests()'調用移動到'try'塊中。 –

回答

3

可能發生的唯一方法是,如果引發的異常未被捕獲並被允許離開OnExecute處理程序。所以你顯然不會捕捉到你所想的一切。

個人而言,我建議不要使用OnExecute事件。將您的邏輯移入單獨的工作線程,該線程在服務OnStart事件中啓動,並在服務OnStop事件中終止。至少這樣,如果線程崩潰,它不會停止服務。您可以覆蓋TThread.DoTerminate()方法來檢查TThread.FatalException屬性,以瞭解未捕獲的異常是否會終止該線程。