首页 > 技术文章 > C# 代码重启windows服务

qq458978 2015-05-20 14:48 原文

 

ServiceController service = new ServiceController("EnergyRecordService");
protected void btnRestart_Click(object sender, EventArgs e)
    {
        try
        {
            if (service.Status == ServiceControllerStatus.Running)
            {
                service.Stop();
                service.WaitForStatus(ServiceControllerStatus.Stopped);
            }
            service.Start();
            service.WaitForStatus(ServiceControllerStatus.Running);

        }
        catch (Exception)
        {
        }
    }

 

Web.Config 配置文件:

如果配置文件不配置这个的话会报一个错误:

Win32Exception (0x80004005): Access is denied 
[InvalidOperationException: Cannot open EnergyRecordService service on computer '.'.]

<system.web> 
 
<identity impersonate="true" userName="服务器登录名" password="登录密码"/> 
 
</system.web>

这个例子展示了如何用C#编程实现启动、停止和重启Windows服务。

启动服务

下面的方法尝试通过指定的服务名称启动服务。然后等待知道服务运行或发生超时。

public static void StartService(string serviceName, int timeoutMilliseconds)
{
  ServiceController service = new ServiceController(serviceName);
  try
  {
    TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
 
    service.Start();
    service.WaitForStatus(ServiceControllerStatus.Running, timeout);
  }
  catch
  {
    // ...
  }
}
停止服务
下面的方法尝试停止指定的服务,然后等待服务停止或发生超时。
public static void StopService(string serviceName, int timeoutMilliseconds)
{
  ServiceController service = new ServiceController(serviceName);
  try
  {
    TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
 
    service.Stop();
    service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
  }
  catch
  {
    // ...
  }
}

 

重启服务
这个方法是上两个方法的合并,尝试停止服务(并等待,直到它停止)然后启动服务(直到服务运行)。指定的超时时间是两个操作合计的超时时间。
 

 

推荐阅读