0

一个windows服务程序是用C#从ServiceBase类派生的。该服务将在 OnStart() 中加载带有后台线程的程序集,并通过 InvokeMember() 调用从函数入口点开始。在程序集 dll/后台线程内部,程序在运行期间会分配各种系统资源。现在的问题是 OnStop() 实现为 NOP,所以没有我可以使用的钩子。在不更改 OnStop() 实现的情况下,如何在“sc stop aService”停止服务时清理分配的资源?

我尝试了各种方法,但除了更改 OnStop() 之外,似乎没有办法拦截“sc stop”消息。我试图添加一个带有背景清理线程的 try/catch/finally 块,但我无法调用 finally 子句。尝试过 AppDomain UnhandledException 和 ProcessExit 处理程序,但也没有做任何事情。那么 SERVICE_CONTROL_STOP(sc stop) 对后台线程有什么影响?无论如何我可以清理我的程序集/ dll中的资源吗?

4

0 回答 0