Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何监控C#windows应用程序的状态?_C#_Windows_Winforms_Monitoring_Health Monitoring - Fatal编程技术网

如何监控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)下无人值守地运行

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

  • 应用程序是否仍在运行或已崩溃
  • 应用程序是否已运行到内部错误状态
我的想法是在Windows中设置一个计划任务(使用任务调度器),每15分钟运行一次Windows控制台应用程序
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
计数器,并在主循环中设置“上次检查的时间”

我那么