通过使用C#从ServiceBase类派生来实现Windows服务程序。该服务将在OnStart()中加载具有后台线程的程序集,并通过InvokeMember()调用从函数入口点开始。在程序集dll /后台线程内,程序将在其运行期间分配各种系统资源。现在问题是OnStop()实现为NOP,所以没有我可以使用的钩子。在不更改OnStop()实现的情况下,如何在“sc stop aService”停止服务时清理已分配的资源?
我尝试了各种方法,但看起来除了更改OnStop()之外没有办法拦截“sc stop”消息。我尝试使用backgroud清理线程添加try / catch / finally块但是我无法调用finally子句。尝试了AppDomain UnhandledException和ProcessExit处理程序,但也没有做任何事情。那么SERVICE_CONTROL_STOP(sc stop)对后台线程的影响是什么?无论如何我可以在我的程序集/ dll中清理资源吗?