C# 无法重新启动服务
我有此代码来重新启动服务,但这不起作用 我可以单独启动和停止,但不能重新启动,这需要我首先停止和启动服务C# 无法重新启动服务,c#,windows-services,C#,Windows Services,我有此代码来重新启动服务,但这不起作用 我可以单独启动和停止,但不能重新启动,这需要我首先停止和启动服务 try { //service.Stop(); //service.Start(); int millisec1 = Environment.TickCount; TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); service.Stop(); service
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);
}
}
让一个空的catch块捕获所有异常很少是一个好主意,因为严重的问题很容易通过 修改代码,至少在catch块中做一些日志记录,例如
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.ToString());
}
然后,您可以在服务的构造函数中附加跟踪侦听器,或者使用Sysinternals中的工具来读取跟踪消息。如果您想更进一步,您可能希望在项目中包括一个日志库,如log4net
我猜您会得到一个TimeoutException
,因为停止服务所需的时间比您预期的要长。您是否尝试过通过删除timeout参数来增加超时或无限等待
更新:
您可能需要检查服务是否已启动:
if (!(service.Status.Equals(ServiceControllerStatus.Stopped)
|| service.Status.Equals(ServiceControllerStatus.StopPending)))
{
service.Stop();
}
service.Start();
让一个空的catch块捕获所有异常很少是一个好主意,因为严重的问题很容易通过 修改代码,至少在catch块中做一些日志记录,例如
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.ToString());
}
然后,您可以在服务的构造函数中附加跟踪侦听器,或者使用Sysinternals中的工具来读取跟踪消息。如果您想更进一步,您可能希望在项目中包括一个日志库,如log4net
我猜您会得到一个TimeoutException
,因为停止服务所需的时间比您预期的要长。您是否尝试过通过删除timeout参数来增加超时或无限等待
更新:
您可能需要检查服务是否已启动:
if (!(service.Status.Equals(ServiceControllerStatus.Stopped)
|| service.Status.Equals(ServiceControllerStatus.StopPending)))
{
service.Stop();
}
service.Start();
将
catch
更改为catch(Exception ex)
,并将异常保存到日志文件或Windows事件日志中。然后请发布该异常的文本,我们将能够解决实际出现的问题。目前,人们能给出的唯一建议是“异常正在发生”。也许你应该阅读异常,它被引发,而不是抑制它。可能会有帮助;o) 你看到了什么例外?您应该捕获一些异常,以便获取和记录消息。捕获中会出现什么异常?因此server.Stop不工作。我在堆栈跟踪中得到错误:“服务尚未启动”,它显示:“[Win32Exception(0x80004005):服务尚未启动][InvalidOperationException:无法停止计算机上的XYZService服务”。]System.ServiceProcess.ServiceController.stop()+410”将catch
更改为catch(异常示例)
并将异常保存到日志文件或Windows事件日志中。然后请发布该异常的文本,我们将能够解决实际出现的问题。目前,人们能给出的唯一建议是“异常正在发生”。也许你应该阅读异常,它被引发,而不是抑制它。可能会有帮助;o) 你看到了什么例外?您应该捕获一些异常,以便获取和记录消息。捕获中会出现什么异常?因此server.Stop不工作。我在堆栈跟踪中得到错误:“服务尚未启动”,它显示:“[Win32Exception(0x80004005):服务尚未启动][InvalidOperationException:无法停止计算机上的XYZService服务”。]System.ServiceProcess.ServiceController.stop()+410”,因此服务器.stop不工作。我在堆栈跟踪中得到错误:“服务尚未启动”,它显示:“[Win32Exception(0x80004005):服务尚未启动][InvalidOperationException:无法停止计算机上的XYZService服务”。]System.ServiceProcess.ServiceController.stop()+410”因此,在上面的代码中发生的情况是,如果条件为true,它将停止服务并进行回发,这样th就不会执行服务。Start()。所以服务正在停止,但没有重新启动。@user175084:“回发”是什么意思?如果服务未处于Stopped或StopPending状态,上面的示例代码将停止该服务。之后,它将启动服务。因此,当服务已经启动,您按下重新启动。。。我再次收到错误,说服务尚未启动][InvalidOperationException:无法在计算机“”上启动XYZService服务。@user175084:您是否查询了服务控制器的当前状态?它告诉您什么?因此服务器.Stop不工作。我在显示的堆栈跟踪中收到错误:“服务尚未启动”:[Win32Exception(0x80004005):服务尚未启动][InvalidOperationException:无法停止计算机“”上的XYZSService服务。]System.ServiceProcess.ServiceController.stop()+410”因此,上述代码中出现的情况是,如果条件为true,则停止服务并进行回发,这样th就不会执行服务。Start()。因此服务正在停止,但不会重新启动。@user175084:“回发”是什么意思?如果服务未处于“已停止”或“停止终止”状态,上述示例代码将停止该服务。之后,它将启动该服务。因此,当服务已启动且您按“重新启动”时,我再次收到错误消息,表示该服务尚未启动][InvalidOperationException:无法在计算机“”上启动XYZSService服务。@user175084:您是否查询了服务控制器的当前状态?它告诉您什么?