C# 如何验证应用程序整天都在运行?

C# 如何验证应用程序整天都在运行?,c#,windows,C#,Windows,我编写了一个windows C#应用程序,它全天候运行,收集传感器数据,并将其存储在数据库中 每晚一次,我对前一天的数据运行一些算法。仅当应用程序在前一天的整个时间内都处于活动状态且没有重大休息时,结果才有用(即休息时间超过5分钟将导致当天的结果无效) 有什么办法可以确保应用程序在一天中一直运行而不出现重大中断? 即使应用程序/windows崩溃并重新启动,该解决方案也应有效 即使应用程序正在运行,也可能在很长时间内没有传感器数据 最初的想法 每分钟增加一个当天的数据库计数器。如果计数器

我编写了一个windows C#应用程序,它全天候运行,收集传感器数据,并将其存储在数据库中

每晚一次,我对前一天的数据运行一些算法。仅当应用程序在前一天的整个时间内都处于活动状态且没有重大休息时,结果才有用(即休息时间超过5分钟将导致当天的结果无效)

有什么办法可以确保应用程序在一天中一直运行而不出现重大中断?

  • 即使应用程序/windows崩溃并重新启动,该解决方案也应有效
  • 即使应用程序正在运行,也可能在很长时间内没有传感器数据

最初的想法

  • 每分钟增加一个当天的数据库计数器。如果计数器达到最大值1440减去公差(60分钟x 24小时),则应用程序整天都在运行。看起来很复杂,每天都需要一个柜台。从夏天到冬天的变化会让人头疼

这取决于你想要发生什么。我脑子里只想了几个简单的主意

如果你想重新启动应用程序,你可以创建一个心跳windows服务,该服务旨在确保进程正在运行。如果它没有运行,您可以让它重新启动进程


如果您只是需要/想要验证数据。让应用程序向数据库报告一次运行状况检查,并在整个过程中将其作为“was it here”使用

保存以下两个变量(在数据库、文件中,无论您想在哪里):

  • 一个整数。这将是您脱机的最大秒数
  • 时间戳。这将是你最后的心跳这必须是UTC,以防DST。
  • 让您的应用程序每隔几秒钟执行以下操作:

  • 读取最后一个时间戳
  • 将其与当前(UTC)时间戳进行比较
  • 如果差值大于整数,则更新整数
  • 使用当前UTC时间戳更新时间戳

  • 每天手动检查时间戳。执行此操作时,请将其重置为零。

    获取传感器数据时,您不能只保存时间戳吗?@metacircle我获取了该时间戳,但它无法帮助我知道我是否获取了当天可用的所有数据。它没有告诉我应用程序是否正在运行。每分钟写一个日志文件。@M.kazemAkhgary你认为每分钟写一个日志文件对增加数据库计数器有什么好处吗(请看我的问题)?为什么你否决并投票赞成关闭这个问题?注意?我只需要更新数据,重启不是问题。你能详细解释一下“报告健康检查”是什么意思吗?很好的提示。我也喜欢这个解决方案。现在想想任何漏洞……我现在能想到的唯一弱点是系统时钟被打乱了,但我看不到任何现代(或最小健壮性)系统会出现这种情况。而且,就我所能想象的,这样的问题会影响任何基于心跳的解决方案(包括日志文件和您建议的DB计数器)。