【问题标题】:how to run a application with fault handling when windows startupWindows启动时如何运行具有故障处理功能的应用程序
【发布时间】:2010-12-09 08:47:00
【问题描述】:
全部。我有一个有线案例
我有两个控制台.net 应用程序。
假设 app1 和 app2。
我希望两个应用程序在 windows 服务器启动时运行(无需登录,我的两个应用程序将自动运行)
但是有一个规则,app1 必须至少比 app2 早 10 分钟运行。
他们中的任何一个都崩溃了,我希望他们可以自动再次升起
有谁知道我该怎么做???
【问题讨论】:
标签:
windows
windows-services
scheduled-tasks
【解决方案1】:
在我看来,唯一可接受的方式是让第三个服务充当看门狗,并在其他服务启动时触发。
这必须由其他进程提供定期“心跳”服务,以防止它关闭和重新启动它所监视的服务。
【解决方案2】:
启动 app1 设置计时器。 10 分钟后启动 app2 并进入 app2_launched 状态。然后使用 pid 文件或 os 共享对象之类的东西来相互“监控”
【解决方案3】:
首先,如果您的应用必须在没有用户登录的情况下运行,它们必须是服务。
现在,在创建服务时,您可以决定如何响应崩溃。您可以将服务配置为在崩溃时重新启动(请参阅服务属性对话框)。
如果 App1 崩溃,是否必须停止 App2,启动 App1,然后在 10 分钟后重新启动 App2?或者这样的话,你可以直接重启App1吗?
然而,根据您的描述,对启动顺序的控制似乎很复杂,内置服务配置是不够的,因此您很可能需要将该逻辑保留在某个地方。
如果 App1 可以了解 App2,您可以在 App1 中拥有该逻辑。然后 App1 将有 2 个职责(运行自己,以及管理 App2 服务的状态)。
另一方面,您可以拥有第三个服务,它只负责管理 App1 和 App2 服务的生命周期和运行状况。这是 ChrisBD 建议的看门狗。