Windows 服务 - 自行重启?
Windows Service - Restart itself?
我需要添加一些代码来在遇到严重错误时重新启动我的 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;
}
问题是它显然不好,因为虽然它停止了......但它无法再次启动:)
有没有办法重新构造它,使其可以 "remember" 自己启动?
谢谢!
当服务停止时,它就停止了。它不再 运行,因此不再执行任何代码。
我认为有两种方法可以实现此目的:Windows 能够在发生致命错误时自行重新启动服务。您需要做的就是:
设置服务失败后重启(双击控制面板中的服务)。如果您希望服务重新启动,只需调用 Environment.Exit(1);
(或任何非零 return),OS 将为您重新启动它。
另一种方法是编写一个服务监控服务,检查服务是否已停止,然后重新启动它。
我需要添加一些代码来在遇到严重错误时重新启动我的 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;
}
问题是它显然不好,因为虽然它停止了......但它无法再次启动:)
有没有办法重新构造它,使其可以 "remember" 自己启动?
谢谢!
当服务停止时,它就停止了。它不再 运行,因此不再执行任何代码。
我认为有两种方法可以实现此目的:Windows 能够在发生致命错误时自行重新启动服务。您需要做的就是:
设置服务失败后重启(双击控制面板中的服务)。如果您希望服务重新启动,只需调用 Environment.Exit(1);
(或任何非零 return),OS 将为您重新启动它。
另一种方法是编写一个服务监控服务,检查服务是否已停止,然后重新启动它。