无法重新启动服务

我有这个代码重新启动服务,但这不起作用。

我可以单独启动和停止但不重启,这涉及到我先停止并启动服务。

try { //service.Stop(); //service.Start(); 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 { // ... } 

它只是进入捕获部分。

我不知道我哪里出错了。

有什么建议。??

更新:

所以我从下面的正确答案中得出了这个想法:

这是需要做的事情>

 public static void RestartService(string serviceName, int timeoutMilliseconds) { ServiceController service = new ServiceController(serviceName); int millisec1 = Environment.TickCount; TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); if (!(service.Status.Equals(ServiceControllerStatus.Stopped) || service.Status.Equals(ServiceControllerStatus.StopPending))) { service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); } // count the rest of the timeout int millisec2 = Environment.TickCount; timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2 - millisec1)); if (!(service.Status.Equals(ServiceControllerStatus.Running) || service.Status.Equals(ServiceControllerStatus.StartPending))) { service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } } 

有一个空的捕获块捕获所有exception很少是一个好主意,因为严重的问题很容易漏掉。

修改你的代码至少在catch块中做一些记录,例如

 catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.ToString()); } 

然后,您可以在服务的构造函数中附加跟踪侦听器,也可以使用Sysinternals中的DebugView工具来读取跟踪消息。 如果您想更进一步,可能需要在项目中包含log4net等日志库。

我的猜测是你得到一个TimeoutException因为停止服务需要更长的时间。 您是否尝试通过删除超时参数来增加超时或无限等待?

更新:

您可能需要检查您的服务是否已启动:

 if (!(service.Status.Equals(ServiceControllerStatus.Stopped) || service.Status.Equals(ServiceControllerStatus.StopPending))) { service.Stop(); } service.Start();