Windows服务 - 重启自己?

时间:2015-07-06 09:28:54

标签: windows service restart

当遇到严重错误(大故事)时,我需要放置一些代码来重启我的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;
    }

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

有没有办法以“记住”开始自己的方式重新构建它?

感谢名单!

1 个答案:

答案 0 :(得分:2)

当服务停止时,它会停止。它不再运行,因此不再执行代码。

在我看来,有两种方法可以实现这一点:Windows能够在致命错误本身重新启动服务。您需要做的就是:

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

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