【问题标题】:Designing a Process Monitor Windows Service设计进程监视器 Windows 服务
【发布时间】:2011-09-27 03:04:03
【问题描述】:

我正在设计一个维护进程列表的 Windows 服务。它可以在它们上运行任务。例如 - 停止特定进程(在其列表中)、重新启动特定进程、运行新进程并将其添加到列表中,等等。

此 Windows 服务由 Web 应用程序通过 WCF 服务控制 - Windows 服务运行 WCF 服务,并且 Web 应用程序连接到该 WCF 服务。 WCF服务导出Restart(int id)和Stop(int id)等方法。

我有几个问题:

  • 当进程意外关闭时(例如,由于内部错误),服务应该更新某个数据库中的值。现在,要做到这一点,我只是有一个线程,它每 30 秒检查一次进程是否正在运行。

    这是这样做的权利吗?我应该使用Exit 事件吗?

  • 当服务关闭时,出于任何原因,它维护的所有进程也将关闭。这样做的正确方法是什么?

    我正在考虑在调用服务的OnClose() 时循环遍历列表并终止所有进程。问题在于OnClose() 事件并不总是被调用。例如,如果服务意外关闭怎么办?它不会调用OnClose()。

  • 我应该如何表示每个任务(例如 - 重新启动进程或停止进程)?

    现在我正在使用System.Threading.Tasks。方法对吗?

此服务应具有高度可扩展性,且错误最少。

谢谢。

【问题讨论】:

  • 听起来好像是在重新发明 Windows 服务控制管理器?
  • SCM 的问题是它不可扩展。在我的服务中,我也有自定义方法,不仅仅是“重启”和“停止”。
  • 然后简单地编写一个自定义应用程序。将这些消息发送到 SCM 托管进程。 Windows 服务支持此模型。

标签: c# multithreading wcf process windows-services


【解决方案1】:

为了在服务关闭时关闭进程,我认为以下步骤可以为您完成这项工作。

  1. 编写一个小程序,可以关闭你想关闭的进程。
  2. 转到服务控制管理器并右键单击您的服务。
  3. 转到“恢复”选项卡并在“第一次失败”、“第二次失败”和“子序列失败”列表框下指定要执行的程序。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多