简体   繁体   English

在C#中重新启动Windows服务

[英]Restart Windows Service in c#

I got a link from SO Cannot restart a Service where it says to restart the windows service. 我从“无法重新启动服务”那里得到一个链接,其中说要重新启动Windows服务。

The way it should restart the service is mentioned in the question as 问题中提到它应重新启动服务的方式为

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);
    }
}

But i am not sure here, as to where to write the code. 但是我不确定在哪里写代码。 I need to restart the windows service as soon as that is installed from my application 从应用程序安装后,我需要重新启动Windows服务

Let me know if any input is needed. 让我知道是否需要任何输入。

Thanks! 谢谢!

I simply use net start and net stop to restart services. 我只是使用net startnet stop重新启动服务。 Example: 例:

using System.Diagnostics;

public static void RestartService(string serviceName)
{
    var psi = new ProcessStartInfo("net.exe", "stop " + serviceName);
    psi.WindowStyle = ProcessWindowStyle.Hidden;
    psi.UseShellExecute = true;
    psi.WorkingDirectory = Environment.SystemDirectory;
    var st = Process.Start(psi);
    st.WaitForExit();

    psi = new ProcessStartInfo("net.exe", "start " + serviceName);
    psi.UseShellExecute = true;
    psi.WindowStyle = ProcessWindowStyle.Hidden;
    psi.WorkingDirectory = Environment.SystemDirectory;
    st = Process.Start(psi);
    st.WaitForExit();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM