无法重新启动服务
我有这个代码重新启动服务,但这不起作用。
我可以单独启动和停止但不重启,这涉及到我先停止并启动服务。
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();