C#windows服务崩溃而没有遇到catch块

时间:2012-01-23 12:02:54

标签: windows service windows-services crash

我有一个c#windows服务,在运行几个小时后几乎每天都没有记录崩溃。最近我在每个方法中添加了catch块,但它仍然无济于事。由于我在MSMQ上使用异步回调,我想可能存在一些多线程问题,但我没有明确的线索。任何洞察这个问题都会非常有帮助。这是伪代码:

public MyService : ServiceBase
{
  onStart()
  {
    try
    {
      someQueue.BeginReceive()
    }
    catch(Exception e)
    {
      log error and throw
    }
  }

  void someQueue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
  {
    try
    {
     //process the message
    }
    catch(Exception e)
    {
       //log
    }
    finally
    {
      someQueue.Refresh()
      someQueue.BeginReceive();
    }
  }
}

2 个答案:

答案 0 :(得分:0)

您可以查看事件查看器以了解服务停止的原因。

打开开始菜单并启动事件查看器,在应用程序部分中,您将找到错误

答案 1 :(得分:0)

我知道自这项要求以来已经过去了数年。但是我遇到了同样的问题,除了以下几点之外,没有解决方案对我有用。 就我而言,事件查看器没有提供有关崩溃的任何详细信息,并且所有用户权限都可以。 问题是OnStart方法中的一行代码:

Debugger.Launch();

它正在尝试启动调试器,但该服务器上未安装该调试器。因此,它从未完成,我的代码也没有捕获任何异常。 摆脱了它,它开始起作用。