我创建了一个服务和一个安装程序。我已经在计算机上安装了我的服务。在服务屏幕中,我可以看到服务正在启动。它不会停止开始,我不能暂停它,什么都没有。我唯一能做的就是卸载。
我已经尝试将 Visual Studio 附加到过程中,但没有真正发生。如何调试此服务?我想知道发生了什么事。
我创建了一个服务和一个安装程序。我已经在计算机上安装了我的服务。在服务屏幕中,我可以看到服务正在启动。它不会停止开始,我不能暂停它,什么都没有。我唯一能做的就是卸载。
我已经尝试将 Visual Studio 附加到过程中,但没有真正发生。如何调试此服务?我想知道发生了什么事。
如果您在处理程序中运行了太多/所有代码,通常会发生这种情况OnStart
- 您应该在其中启动然后返回。只有在您返回后,您的服务才被视为已启动。
您通常会创建一个或多个 newThread
来运行您想要一直运行的代码,Start()
然后返回。或者创建隐式运行它们自己的线程的对象(例如 WCF's ServiceHost
)。
然后,你的工作就是OnStop
优雅地关闭它们——例如Set
,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.
}
}
}