2011-07-02 82 views
5

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

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

我有几个问题:

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

    这是正确的吗?我应该使用Exit事件吗?

  • 当服务关闭,为任何原因,所有它应保持太近过程。什么是正确的方法来做到这一点?

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

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

    现在我正在使用System.Threading.Tasks。这是正确的方式吗?

该服务应该具有高度可扩展性,并且错误率最低。

谢谢。

+4

听起来好像您正在重新创建Windows服务控制管理器? –

+1

单片机的问题在于它不可扩展。在我的服务中,我也有自定义的方法,不仅是'重新启动'和'停止'。 –

+1

然后只需编写一个自定义应用程序。将这些消息发送给SCM托管进程。 Windows服务支持这种模式。 –

回答

0

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

  1. 编写一个小程序,可以关闭您要关闭的进程。
  2. 转到Service Control Manager并右键单击您的服务。
  3. 转到恢复选项卡并指定您的程序在第一次失败,第二次失败和后续失败列表框中执行。

希望这会有所帮助。