我有一个用C#编写的服务应用程序,在某些情况下,我希望它能够自行终止。这将发生在服务运行一段时间后,因此不会在OnStart()事件中发生。
到目前为止,我所了解的信息表明,通过服务控制管理器是唯一安全的终止服务的方法。我的服务以本地服务运行,没有启动或停止服务的权限,因此无法从服务本身访问SCM。是否还有其他方式可以在遵守SCM规则的同时自我终止?
我有一个用C#编写的服务应用程序,在某些情况下,我希望它能够自行终止。这将发生在服务运行一段时间后,因此不会在OnStart()事件中发生。
到目前为止,我所了解的信息表明,通过服务控制管理器是唯一安全的终止服务的方法。我的服务以本地服务运行,没有启动或停止服务的权限,因此无法从服务本身访问SCM。是否还有其他方式可以在遵守SCM规则的同时自我终止?
尝试使用ServiceBase.Stop()
函数。
如果你想终止服务而不是停止它(可能是因为服务捕获了一个未处理的异常),你可以使用Environment.Exit(1)
(如果需要,可以使用其他退出代码)。
Windows将发现服务意外终止。如果已配置服务进行恢复,则将使用恢复过程,其中包括重新启动服务、运行程序或重新启动计算机的选项。
ThreadPool.QueueUserWorkItem(ExitImmediate); Environment.Exit(1);
其中ExitImmediate会休眠一段时间,然后执行FailFast。 - yu_shaProcess.GetCurrentProcess().Kill()
之间的区别,而您提到Exit可能会因任何原因而挂起,所以选择Kill! - Chris Marisic不要让服务在本地服务下运行。请让它在一个有停止服务权限的用户下运行。
虽然自我终止服务的想法并不是最好的想法。但这个事实本身就意味着它应该是一个应用程序,而不是一个服务。