3

我想重新启动名为“Spooler”的窗口服务,我做了以下代码,但没有运气,任何人都知道发生了什么问题吗?代码是

using System.ServiceProcess;

ServiceController service = new ServiceController("Spooler");

if ((service.Status.Equals(ServiceControllerStatus.Stopped)) ||
    (service.Status.Equals(ServiceControllerStatus.StopPending)))
{
    service.Start();
}
else
{
    service.Stop();
    service.Start();
}

例外是

“System.InvalidOperationException:无法在计算机'.'上启动服务假脱机程序。---> System.ComponentModel.Win32Exception:服务的实例已经在运行

--- 内部异常堆栈跟踪结束 ---

在 System.ServiceProcess.ServiceController.Start(字符串 [] 参数)

在 System.ServiceProcess.ServiceController.Start()

在 D:\samplecodes\servicerestart\servicerestart\Form1.cs:line 33 中的 servicerestart.Form1.button1_Click(Object sender, EventArgs e)

4

2 回答 2

9

WaitForStatus您必须在停止服务后等待,然后使用以下方法再次启动它:

else
{
    service.Stop();
    service.WaitForStatus(ServiceControllerStatus.Stopped);
    service.Start();
    service.WaitForStatus(ServiceControllerStatus.Running);
}
于 2013-03-03T08:31:20.667 回答
0

我认为问题是您需要管理员权限才能启动和停止服务,这就是您必须授予所需权限的原因。

为此,请将 ISS 中的应用程序池的标识更改为 LocalSystem。

希望这有帮助

于 2014-01-23T07:10:49.343 回答