“外部组件引发的异常”

时间:2013-04-25 07:55:26

标签: c# .net windows-services

我在C#中有一个Windows服务。运行1-2天(不具体)后,服务停止(它实际上没有停止,但它没有处理任何东西。服务状态仍然是“已启动”,我需要手动重启服务,然后再次运行)。

记录的异常是“外部组件抛出异常”。这发生在第三方控件中。

我希望服务能够在没有任何停顿的情况下继续,因为在生产中没有人会检查服务是否已经启动/处理,除非特定功能停止。

我有所有TRY..CATCH。

任何建议,即使发生上述错误,我如何确保服务继续?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可能想尝试在catch块中执行类似的操作:

public static void RestartService(string serviceName, int timeoutMilliseconds)
{
  ServiceController service = new ServiceController(serviceName);
  try
  {
    int millisec1 = Environment.TickCount;
    TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);

    service.Stop();
    service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);

    // count the rest of the timeout
    int millisec2 = Environment.TickCount;
    timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2-millisec1));

    service.Start();
    service.WaitForStatus(ServiceControllerStatus.Running, timeout);
  }
  catch
  {
    // ...
  }
}

如果RestartService失败,您可以一起停止服务。代码示例here