2014-02-15 31 views
0

假设我有一个Windows应用程序,名为app.exe,用C#(Windows Forms)编写,在任何Windows操作系统(XP到8)下运行无人参与如何监视C#windows应用程序的状态?

我想监视应用程序的状态:

  • 是应用程序仍在运行或有坠毁
  • 有应用程序运行到一个内部错误状态

我的想法是在Windows(使用任务计划程序)中设置计划任务以每15分钟运行一次Windows控制台应用程序monitor.exe。 显示器应用程序将发送状态为app.exe的电子邮件。

我一直无法弄清楚:

  • 我如何找出是否app.exe仍在运行?
  • 如何从monitor.exe访问内部变量app.exe

一个想法是建立在app.exe一个计时器,将写入内部状态到一个文件,并有monitor.exe读取和评估文件每隔15分钟。但是这对我来说并不是很优雅(然而它会起作用)。

您有更好的最佳实践方法吗?

回答

1

下面是一个更复杂的解决方案,您可以在app.exe中添加监视器层和服务层。监控层负责收集内部变量状态,服务层负责提供发出请求的内部状态。

每当执行monitor.exe,它会发出GetStatus服务请求app.exe,并得到了什么是从app.exe里面发生的反应。

缺点是您必须在app.exemonitor.exe之间创建连接,而后者必须知道部署在本地计算机上的所有app.exe的服务端口。

+0

嗨,塞特,我喜欢这个主意。你的意思是像一个命名管道?哪里可以让客户端和服务器在本地交换消息? – Sebastian

+0

@Sebastian是的,命名管道很好。具体实施可能会有所不同。 – ssett

+0

我最终使用命名管道进行进程间通信(IPC)。这个概念对我来说是全新的,所以非常感谢@ssett指导我朝着正确的方向发展! – Sebastian

0

您可以在app.exe的计时器中发送状态为邮件的邮件,如果您最近15分钟没有收到邮件,这意味着您的应用程序崩溃或关闭。

或者为你的操作创建try/catch来收集信息,然后用包含当前状态的电子邮件发送它们。

+0

嗨,TC Alper Tokcan,我想实现电子邮件发送只在monitor.exe,因为我想重新使用monitor.exe其他app.exes。因此,我想知道谁可以访问app.exe的状态。谢谢! (: – Sebastian

+0

@Sebastian我认为'app.exe'与'monitor.exe'通信的唯一方法是从'app.exe'保存一个文件,该文件具有关于状态的一些信息并从'monitor.exe'中读取它:) –

2

性能计数器是完美的。我有几个使用​​计数器的.Net应用程序,并在主循环中设置“上次检查时间”。

然后我用一个集中监控和通知系统监控这个计数器。 (我们在工作时使用SolarWinds)如果我希望每分钟运行一次并且计数器超过5分钟,则警报将设置为关闭。

相关问题