2015-07-06 39 views
0

我需要把一些代码来重新启动我的Windows服务时面临的一个严重错误(重大事件)Windows服务 - 重新启动?

我有这个功能

public Boolean 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); 
      int millisec2 = Environment.TickCount; 
      service.Start(); 
      service.WaitForStatus(ServiceControllerStatus.Running, timeout); 
      if (service.Status != ServiceControllerStatus.Running) 
      { 
       return false; 
      } 
     } 
     catch (System.ServiceProcess.TimeoutException ex) 
     { 

      return false; 
     } 
     return true; 
    } 

的事情是,这显然不是一件好事,因为虽然它停止...它不能再次开始:)

有没有办法重新构建它可以“记住”启动自己?

Thanx!

回答

2

服务停止时停止。它不再运行,所以没有更多的代码正在执行。

在我看来,有两种方法可以实现这一目标:Windows能够在致命错误本身重新启动服务。您只需执行以下操作:

将服务设置为在失败后重新启动(双击控制面板中的服务)。如果您希望服务重新启动,只需拨打Environment.Exit(1);(或任何非零返回),操作系统将为您重新启动服务。

另一种方法是编写服务监视器服务,检查服务是否停止并重新启动它。

+0

谢谢Thorsten!但是我应该在哪里放置Environment.Exit(1);码? – PanosPlat

+1

那么,在你的代码的什么时候你打算调用你的非功能'RestartService'方法?那里! :-)你也可以用'Environment.Exit(1)'替换'RestartService'方法的内容,并从方法声明中删除参数。如果您没有发现允许您重新启动服务的异常,它仍然可以正常工作,因为在这种情况下服务会意外停止,系统也会因为第一个配置步骤而重新启动服务。 –