我有一个从ServiceBase派生的Windows服务类,它使用System.Timers.Timer以频繁的间隔运行代码。 OnStop和OnPause处理程序使用一些信号与定时器线程一起检查定时器是否仍在运行并等待它结束。
在这种情况下是否有推荐的处理延迟错误的方法,例如处理程序是否在等待计时器线程停止的不可接受的长时间?
我应该继续等待,直到SCM放弃(但是这将使服务进入一种状态,除了杀死进程之外,对服务不能做任何事情,有时候重启是唯一的方法)。 或者我可能会抛出一个exception(这会使其处于类似的状态,还是放弃停止/暂停请求)?
如果我可以拒绝暂停/停止的请求,并让SCM将其保留在用户可以尝试暂停/再次停止的状态,我宁愿这样做。 我可以中止计时器线程,但是有时它会locking在其他资源上,我宁愿等待直到完成,并且只有在pipe理员能够稍后尝试停止时logging错误。
使用与DLL相同的EXE应用程序到其他应用程序
将消息发送到Windows GUI线程
如何在一个或多个for循环中使用现有的variables?
写入Windows应用程序事件日志,无需注册事件源
如何以编程方式检查WCF Http / Non-Http Activation组件?
从主function最大化窗口?
Silverlight VS. WPF VS. Winforms特别是我的目的有什么好处?
以编程方式获取Windows体验索引值
哪个.net版本的Windows 10内置
您可以使用RequestAdditionalTime方法通知SCM您需要更多时间来停止/暂停您的服务。
我反对SCM放弃了我的头,导致我的服务像在六月份在南极洲晒日光浴一样冻结起来。
对我而言,问题在于服务做了一些处理,可能会花费比SCM更愿意等待响应停止请求的时间。
我喜欢我的软件开始/退出/暂停,甚至优雅地死亡。
我实现的解决方案是使用配置文件。 我把一个ExecutionMode参数在文件中。 在每个处理循环开始时,它检查配置文件 – 如果ExecutionMode是暂停或停止 ,则执行代码来改变状态,并使用SMTP向ServiceChangeNotification参数中列出的电子邮件ID发送电子邮件。 电子邮件中包含的机器名称,时间戳,服务名称,旧状态,旧状态开始时间,当前状态,当前状态开始时间,日志详细信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。