使用 System.ServiceProcess.ServiceController 类,可以获取指定服务的信息,并能控制指定服务。
注意:要添加 C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.ServiceProcess.dll 的引用
当调用ServiceController类对象 的Start()/Stop() 方法后,ServiceController 对象的Status 属性并不会发生变化,如果要使Status属性的值反映出服务的真实情况,必须通过一些方法来实现:
eg:
//定义一个ServiceController 对象
ServiceController sc = new ServiceController("Telnet");
//开始启动"Telnet"服务,马上执行下一条语句(这时候telnet服务还没有完成启动)
sc.Start();
//等待服务到达running状态
sc.WaitForStatus(ServiceControllerStatus.Running);
//刷新对象的属性值
sc.Refresh();
//打印对象的Status属性值
Console.WriteLine("Service Status: " + sc.Status.ToString());
注意:因为,启动任何服务都需要一定的时间,上面的例子中,如果没有WaitForStatus()语句,打印出的Status的值是 StartPending 。因为Start()方法启动了服务,但不会等待服务完成启动,就马上执行下一条语句了(这时服务正处于"启动中"状态)。
如果没有sc.Refresh()语句,sc对象的Status属性值是不会发生变化的
![](https://img2024.cnblogs.com/blog/35695/202407/35695-20240713070336838-1837943664.jpg)