如何监控C#windows应用程序的状态?

时间:2014-02-15 10:49:19

标签: c# windows winforms monitoring health-monitoring

假设我有一个名为app.exe的Windows应用程序,用C#编写(Windows窗体),在任何Windows操作系统(XP到8)下运行无人值守

我想监控应用的状态:

  • 应用程序是否仍在运行或已崩溃
  • 应用是否遇到内部错误状态

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

我无法弄清楚:

  • 如何判断app.exe是否仍在运行?
  • 如何从app.exe
  • 访问monitor.exe中的内部变量

一个想法是在app.exe中设置一个计时器,它将内部状态写入文件,并且每隔15分钟monitor.exe读取并评估该文件。但这对我来说似乎并不优雅(但它会奏效)。

你有更好的,最好的做法吗?

3 个答案:

答案 0 :(得分:2)

性能计数器非常适合这种情况。我有几个.Net应用程序使用PerformanceCounterType.ElapsedTime计数器并在主循环中设置“最后检查时间”。

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

答案 1 :(得分:1)

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

每当执行monitor.exe时,它会向GetStatus发出app.exe服务请求,并从app.exe内部获取正在进行的响应。

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

答案 2 :(得分:0)

您可以通过计时器中的app.exe发送邮件以获取状态,如果您在过去15分钟内未收到邮件,则表示您的应用已崩溃或已关闭。

或者为您的操作创建try / catch以收集信息abaut崩溃并使用包含当前状态的电子邮件发送它们。