关于Windows服务编程:如何停止我的Windows服务?
这是一个非常简化的示例代码(C#):
// Here is my service class (MyTestService.cs).
public class MyTestService:ServiceBase{
// Constructor.
public MyTestService(){
this.ServiceName = "My Test Service";
return;
}
};
// My application class (ApplicationClass.cs).
public static class ApplicationClass{
// Here is main Main() method.
public static void Main(){
// 1. Creating a service instance
// and running it using ServiceBase.
MyTestService service = new MyTestService();
ServiceBase.Run(service);
// 2. Performing a test shutdown of a service.
service.Stop();
Environment.Exit(0);
return;
};
};
所以:我刚刚创建了“我的测试服务”,启动它并停止。但是,当我查看 Services.msc 时,“我的测试服务”继续运行,仅当我单击“停止”链接时才停止。为什么? - 为什么服务.Stop()命令什么都不做?
ServiceController.Stop() 也不执行任何操作!
如何从 Main() 方法停止我的服务?
The Stop
- 函数发送停止信号。它不会等到信号被接收和处理。
您必须等到停止信号完成工作为止。您可以通过致电来做到这一点WaitForStatus
:
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped);
查看更多信息:http://msdn.microsoft.com/nl-nl/library/system.serviceprocess.servicecontroller.waitforstatus(v=vs.71).aspx http://msdn.microsoft.com/nl-nl/library/system.serviceprocess.servicecontroller.waitforstatus(v=vs.71).aspx
Environment.Exit
是一个令人讨厌的。不要使用它!它以硬方式中止您的应用程序,无需在finally块中执行任何清理,无需通过GC调用终结器方法,它会终止所有其他前台线程等。我可以想象您的应用程序在停止信号甚至离开您的应用程序之前就中止了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)