0

我创建了一个服务和一个安装程序。我已经在计算机上安装了我的服务。在服务屏幕中,我可以看到服务正在启动。它不会停止开始,我不能暂停它,什么都没有。我唯一能做的就是卸载。

我已经尝试将 Visual Studio 附加到过程中,但没有真正发生。如何调试此服务?我想知道发生了什么事。

4

1 回答 1

1

如果您在处理程序中运行了太多/所有代码,通常会发生这种情况OnStart- 您应该在其中启动然后返回。只有在您返回后,您的服务才被视为已启动。

您通常会创建一个或多个 newThread来运行您想要一直运行的代码,Start()然后返回。或者创建隐式运行它们自己的线程的对象(例如 WCF's ServiceHost)。

然后,你的工作就是OnStop优雅地关闭它们——例如SetManualResetEvent然后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.
    }
   }
 }
于 2013-04-24T13:56:36.200 回答