C# 设计进程监视器Windows服务

C# 设计进程监视器Windows服务,c#,multithreading,wcf,process,windows-services,C#,Multithreading,Wcf,Process,Windows Services,我正在设计一个维护进程列表的Windows服务。它可以在它们上面运行任务。例如-停止特定进程(在其列表中)、重新启动特定进程、运行新进程并将其添加到列表中,等等 此Windows服务由web应用程序通过WCF服务控制-Windows服务运行WCF服务,web应用程序连接到该WCF服务。WCF服务导出方法,例如重新启动(int-id)和停止(int-id) 我有几个问题: 当进程意外关闭时(例如,由于内部错误),服务应该更新某个数据库中的值。现在,要做到这一点,我只需要一个线程,它每30秒检查一

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

此Windows服务由web应用程序通过WCF服务控制-Windows服务运行WCF服务,web应用程序连接到该WCF服务。WCF服务导出方法,例如
重新启动(int-id)
停止(int-id)

我有几个问题:

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

    这样做对吗?我应该使用退出事件吗

  • 当服务因任何原因关闭时,其维护的所有流程也应关闭。正确的方法是什么

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

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

    现在我正在使用
    System.Threading.Tasks
    。这条路对吗

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


谢谢。

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

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

  • 希望这会有所帮助。

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