Stoping服务时不会调用.NET WindowService,AppDomain.CurrentDomain.DomainUnload

时间:2011-06-03 03:23:51

标签: .net windows-services window c#-2.0

我有一个.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中。

1 个答案:

答案 0 :(得分:4)

“CurrentDomain”是默认的应用域吗?我猜是这样,除非你创建自定义域。如果是,请注意DomainUnload is not raised for the default domain

对于ProcessExit,我不确定,但请注意,Windows服务的生命周期不一定与托管它的进程的生命周期绑定。如果进程承载多个Windows服务,则只有在所有服务都停止时才会退出。