2013-04-24 174 views
0

我創建了一個服務和安裝程序。我在電腦上安裝了我的服務。在服務屏幕中,我可以看到該服務正在啓動。它不會停止開始,我不能暫停它,沒有。我唯一能做的就是卸載。Windows服務不停止「正在啓動」

我試過的Visual Studio附加到進程列表的程序,但沒有真正發生。我如何調試此服務?我想知道發生了什麼事。

+0

此,如果你有太多的通常發生/所有的'OnStart'處理程序中運行代碼的 - 你註定要踢東西了在那裏,然後*返回*。只有一次你回來,你的服務被視爲開始。 – 2013-04-24 13:45:02

+0

我該如何返回? – Joetjah 2013-04-24 13:50:24

回答

1

如果你有太多的/你所有的OnStart處理程序中運行代碼的這通常發生 - 你註定要踢東西了在那裏,然後返回。只有一次你回來,你的服務被視爲開始。

您最好創建一個運行您需要運行的所有的時間,他們Start()然後返回代碼的一個或多個新的Thread秒。或者創建隱式運行自己的線程的對象(例如WCF的ServiceHost)。

然後,你的工作在OnStop關閉它們優雅地 - 例如Set a ManualResetEvent然後在這些線程上Join

例如,你的類可能是這樣的(未測試)

public class MyService : ServiceBase { 
    private ManualResetEvent _stop = new ManualResetEvent(false); 
    private Thread _worker; 

    public override void OnStart(string[] args) { 
    _worker = new Thread(DoStuff); 
    _worker.Start(); 
    } 

    public override void OnStop() { 
    _stop.Set(); 
    _worker.Join(); 
    } 

    private void DoStuff() { 
    while(!_stop.WaitOne(0)) { 
    //Do something useful here. 
    } 
    } 
}