假设我有一个名为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
读取并评估该文件。但这对我来说似乎并不优雅(但它会奏效)。
你有更好的,最好的做法吗?
答案 0 :(得分:2)
性能计数器非常适合这种情况。我有几个.Net应用程序使用PerformanceCounterType.ElapsedTime
计数器并在主循环中设置“最后检查时间”。
然后,我使用集中监控和通知系统监控此计数器。 (我们在工作中使用SolarWinds)如果我希望每分钟运行一次并且计数器超过5分钟,则警报将设置为关闭。
答案 1 :(得分:1)
这是一个更复杂的解决方案,您可以在app.exe
中添加监控层和服务层。监视器层负责收集内部变量状态,服务层负责向发出GetStatus
请求的人员提供内部状态。
每当执行monitor.exe
时,它会向GetStatus
发出app.exe
服务请求,并从app.exe
内部获取正在进行的响应。
缺点是您必须在app.exe
和monitor.exe
之间建立连接,后者必须知道部署在本地计算机上的所有app.exe的服务端口。
答案 2 :(得分:0)
您可以通过计时器中的app.exe
发送邮件以获取状态,如果您在过去15分钟内未收到邮件,则表示您的应用已崩溃或已关闭。
或者为您的操作创建try / catch以收集信息abaut崩溃并使用包含当前状态的电子邮件发送它们。