目前正在尝试编写一个可以检测服务特定状态的C#程序。如果服务正在运行,程序将关闭它。如果服务停止,程序将运行它。
以下是我的代码:
ServiceController sc = new ServiceController("RtkAudioService");
Console.WriteLine("Status = " + sc.Status);
Console.WriteLine("Can Pause and Continue = " + sc.CanPauseAndContinue);
Console.WriteLine("Can ShutDown = " + sc.CanShutdown);
Console.WriteLine("Can Stop = " + sc.CanStop);
Console.WriteLine("Machine Name = " + sc.MachineName);
if (sc.Status.Equals(ServiceControllerStatus.Stopped))
{
sc.Start();
}
else if (sc.Status.Equals(ServiceControllerStatus.Running))
{
sc.Stop();
}
我试图为我的电脑停止/运行各种服务但是失败了。 RtkAudioService只是我失败的一个例子。所有错误消息都是相同的:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.ServiceProcess.dll
Additional information: Cannot open RtkAudioService service on computer '.'.
你们知道发生了什么吗?
答案 0 :(得分:1)
我遇到了同样的问题,我决定在启动或停止服务后添加此代码:
sc.WaitForStatus(ServiceControllerStatus."status");
答案 1 :(得分:0)
以管理员身份运行VS,它解决了调试中的问题。
因为程序必须有权运行或停止服务可能是管理员权限。
答案 2 :(得分:0)
同样的情况恰好发生在我身上,并通过在检查状态之前添加“sc.Refresh()”来解决(可能状态不是最新的,因此您正在尝试启动正在运行的进程)。 我会尝试在if之前打印服务状态,并确保结果符合您的期望。