如何监控C#windows应用程序的状态?
假设我有一个名为如何监控C#windows应用程序的状态?,c#,windows,winforms,monitoring,health-monitoring,C#,Windows,Winforms,Monitoring,Health Monitoring,假设我有一个名为app.exe,用C#(Windows窗体)编写的Windows应用程序,在任何Windows操作系统(XP到8)下无人值守地运行 我想监控应用程序的状态: 应用程序是否仍在运行或已崩溃 应用程序是否已运行到内部错误状态 我的想法是在Windows中设置一个计划任务(使用任务调度器),每15分钟运行一次Windows控制台应用程序monitor.exe。 monitor应用程序将发送一封状态为app.exe的电子邮件 我没能弄明白的是: 如何确定app.exe是否仍在运行
app.exe
,用C#(Windows窗体)编写的Windows应用程序,在任何Windows操作系统(XP到8)下无人值守地运行
我想监控应用程序的状态:
- 应用程序是否仍在运行或已崩溃
- 应用程序是否已运行到内部错误状态
monitor.exe
。
monitor应用程序将发送一封状态为app.exe
的电子邮件
我没能弄明白的是:
- 如何确定app.exe是否仍在运行
- 如何从
访问monitor.exe
中的内部变量app.exe
app.exe
中设置一个计时器,将内部状态写入一个文件,并让monitor.exe
每隔15分钟读取和评估一次该文件。但对我来说,这似乎不太优雅(不管它如何工作)
您有更好的最佳实践方法吗?您可以通过状态计时器从
app.exe
发送邮件,如果您最近15分钟未收到邮件,则表示您的应用程序已崩溃或关闭
或者为收集崩溃信息的操作创建try/catch,并将其与包含当前状态的电子邮件一起发送。您可以使用状态计时器从
app.exe
发送邮件,如果您在过去15分钟内未收到邮件,则表示您的应用程序已崩溃或关闭
或者为收集崩溃信息的操作创建try/catch,并将其与包含当前状态的电子邮件一起发送。您可以使用状态计时器从
app.exe
发送邮件,如果您在过去15分钟内未收到邮件,则表示您的应用程序已崩溃或关闭
或者为收集崩溃信息的操作创建try/catch,并将其与包含当前状态的电子邮件一起发送。您可以使用状态计时器从
app.exe
发送邮件,如果您在过去15分钟内未收到邮件,则表示您的应用程序已崩溃或关闭
或者为收集崩溃信息的操作创建try/catch,并通过包含当前状态的电子邮件发送这些信息。这里有一个更复杂的解决方案,您可以在
app.exe
中添加一个监控层和一个服务层。监控层负责收集内部变量状态,服务层负责向发出GetStatus
请求的用户提供内部状态
每当执行monitor.exe
时,它都会向app.exe
发出GetStatus
服务请求,并从app.exe
中获取对内部情况的响应
缺点是您必须在
app.exe
和monitor.exe
之间创建连接,后者必须知道本地计算机上部署的所有app.exe的服务端口。这里有一个更复杂的解决方案,您可以在app.exe
中添加一个监控层和一个服务层。监控层负责收集内部变量状态,服务层负责向发出GetStatus
请求的用户提供内部状态
每当执行monitor.exe
时,它都会向app.exe
发出GetStatus
服务请求,并从app.exe
中获取对内部情况的响应
缺点是您必须在
app.exe
和monitor.exe
之间创建连接,后者必须知道本地计算机上部署的所有app.exe的服务端口。这里有一个更复杂的解决方案,您可以在app.exe
中添加一个监控层和一个服务层。监控层负责收集内部变量状态,服务层负责向发出GetStatus
请求的用户提供内部状态
每当执行monitor.exe
时,它都会向app.exe
发出GetStatus
服务请求,并从app.exe
中获取对内部情况的响应
缺点是您必须在
app.exe
和monitor.exe
之间创建连接,后者必须知道本地计算机上部署的所有app.exe的服务端口。这里有一个更复杂的解决方案,您可以在app.exe
中添加一个监控层和一个服务层。监控层负责收集内部变量状态,服务层负责向发出GetStatus
请求的用户提供内部状态
每当执行monitor.exe
时,它都会向app.exe
发出GetStatus
服务请求,并从app.exe
中获取对内部情况的响应
缺点是您必须在
app.exe
和monitor.exe
之间创建连接,后者必须知道本地计算机上部署的所有app.exe的服务端口。性能计数器非常适合于此。我有几个.Net应用程序使用PerformanceCounterType.ElapsedTime
计数器,并在主循环中设置“上次检查的时间”
然后我用一个集中的监视和通知系统监视这个计数器。(我们在工作中使用SolarWinds)如果我希望每分钟运行一次,并且计数器超过5分钟,则警报设置为关闭。性能计数器非常适合此功能。我有几个.Net应用程序使用
PerformanceCounterType.ElapsedTime
计数器,并在主循环中设置“上次检查的时间”
我那么