我已经创建了一个服务和一个安装程序。我在电脑上安装了我的服务。在服务屏幕中,我可以看到该服务正在启动。它不会停止开始,我不能暂停,没有。我唯一能做的就是卸载。
我已经尝试将Visual Studio附加到进程,但没有真正发生。我该如何调试此服务?我想知道发生了什么。
答案 0 :(得分:1)
如果您的OnStart
处理程序中运行了太多/所有代码,通常会发生这种情况 - 您打算在那里启动并返回。只有在您返回后才认为您的服务已经开始。
您通常会创建一个或多个新的Thread
来运行您想要一直运行的代码,Start()
然后返回。或者创建隐式运行自己的线程的对象(例如WCF的ServiceHost
)。
然后,OnStop
的工作是优雅地关闭它们 - 例如<{3}} Set
然后ManualResetEvent
在这些主题上。
例如,您的课程可能看起来像这样(未经过测试)
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.
}
}
}