我有一个.NET窗口服务,它扩展了一个自定义基类,这是我迄今为止编写的许多Windows服务的基础,现在我想在这个基类上添加一些监视器(hearbeat),在初始化基类的我启动一个线程,它将通知数据库并休眠40秒,这不是完美的,但到目前为止服务于它的purpouse 。我已经为AppDomain.CurrentDomain注册了一个事件。 DomainUnload ,以停止心跳线程,但是当我停止Window Service时,我的数据库更新已停止,但是我在事件中注册的日志已经注册在AppDomain.CurrentDomain。 DomainUnload 没有出现在事件查看器中,所以我没有明确指示事件是否被触发。
我无法将心跳初始化放入我的基类的OnStart / OnStop,因为它需要重新编译我的所有Windows服务,以确保所有这些都调用base.OnStart / base.OnStop。
知道为什么AppDomain.CurrentDomain。 DomainUnload 没有被解雇
PS。
我还尝试使用AppDomain.CurrentDomain。 ProcessExit ,结果与上面相同,没有记录在EventViewer中。
答案 0 :(得分:4)
“CurrentDomain”是默认的应用域吗?我猜是这样,除非你创建自定义域。如果是,请注意DomainUnload is not raised for the default domain。
对于ProcessExit
,我不确定,但请注意,Windows服务的生命周期不一定与托管它的进程的生命周期绑定。如果进程承载多个Windows服务,则只有在所有服务都停止时才会退出。