【问题标题】:how to restart windows service c#c#如何重启windows服务
【发布时间】:2023-04-08 07:30:01
【问题描述】:

我希望每隔一小时通过 C# 代码重新启动 Windows 服务。我有这个方法 但是当我在项目安装程序中还是在哪里?我可以把它放在我想重新启动它的同一个服务中吗?

public static void 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);

        // count the rest of the timeout
        int millisec2 = Environment.TickCount;
        timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2 - millisec1));

        service.Start();
        service.WaitForStatus(ServiceControllerStatus.Running, timeout);
    }
    catch
    {
        // ...
    }
}

【问题讨论】:

  • 您是否正在尝试构建一个服务来监控另一个服务?或者您是否希望关闭相关服务,以便必须定期手动启动它?

标签: c#-4.0 windows-services


【解决方案1】:

我通过在这样的服务中创建一个方法来解决它

 private void StopService()
{
   using (ServiceController service = new ServiceController("ServiceName"))
   {
   try
   {
       TimeSpan timeout = TimeSpan.FromMilliseconds(80000);

        if (!(service.Status.Equals(ServiceControllerStatus.StartPending) || service.Status.Equals(ServiceControllerStatus.StopPending)))
        {
            service.Stop();
            service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
        }
    }
    catch (Exception ex)
    {
        ExceptionLog(ex);
    }
}

}

并让另一个服务重新启动它

【讨论】:

    【解决方案2】:

    您可以将此添加到 Windows 调度程序。只需将此功能放在 Windows 命令程序中并安排每小时启动它。此外,您可以有第二个服务来完成第一个服务的回收。

    -rwg

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多