【问题标题】:Restart Windows Service in c#在 C# 中重新启动 Windows 服务
【发布时间】:2011-04-06 06:19:15
【问题描述】:

我从 SO Cannot restart a Service 获得了一个链接,上面说要重新启动 Windows 服务。

问题中提到了它应该重新启动服务的方式

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

但我不确定在哪里编写代码。从我的应用程序安装后,我需要重新启动 Windows 服务

如果需要任何输入,请告诉我。

谢谢!

【问题讨论】:

  • “从我的应用程序安装”是什么意思?如果您使用 Windows Installer,请从 Installer 派生一个类。如果您手动安装,请在安装代码之后立即调用 RestartService。但是,RestartService 是从您的应用程序内部调用的。
  • @sprinter252:当我安装我的 Windows(桌面)应用程序时,该服务安装在 services.msc 中。之后,我希望重新启动一次。该怎么做?
  • 安装后为什么不使用net start。
  • @James:不知道你说的“网”是什么意思?
  • net start 可以从命令行调用,我假设你安装了服务?

标签: c# asp.net visual-studio windows-services


【解决方案1】:

我只是使用net startnet stop 来重启服务。示例:

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

【讨论】:

  • 我们可以在同一个服务中开始停止服务吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
相关资源
最近更新 更多