0
我創建了一個服務和安裝程序。我在電腦上安裝了我的服務。在服務屏幕中,我可以看到該服務正在啓動。它不會停止開始,我不能暫停它,沒有。我唯一能做的就是卸載。Windows服務不停止「正在啓動」
我試過的Visual Studio附加到進程列表的程序,但沒有真正發生。我如何調試此服務?我想知道發生了什麼事。
我創建了一個服務和安裝程序。我在電腦上安裝了我的服務。在服務屏幕中,我可以看到該服務正在啓動。它不會停止開始,我不能暫停它,沒有。我唯一能做的就是卸載。Windows服務不停止「正在啓動」
我試過的Visual Studio附加到進程列表的程序,但沒有真正發生。我如何調試此服務?我想知道發生了什麼事。
如果你有太多的/你所有的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.
}
}
}
此,如果你有太多的通常發生/所有的'OnStart'處理程序中運行代碼的 - 你註定要踢東西了在那裏,然後*返回*。只有一次你回來,你的服務被視爲開始。 – 2013-04-24 13:45:02
我該如何返回? – Joetjah 2013-04-24 13:50:24