Windows服务不停止“正在启动”
问题描述:
我创建了一个服务和安装程序。我在电脑上安装了我的服务。在服务屏幕中,我可以看到该服务正在启动。它不会停止开始,我不能暂停它,没有。我唯一能做的就是卸载。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