windows 是在发生错误(内存溢出等)时优雅地停止服务还是终止服务?

Does windows stop services gracefully or kills them when an error (memory overflow, etc) occurs?

首先抱歉我的英语不好。我真的不知道如何提出这个问题,但我可以向你解释我的意图,这样可以帮助你更好地理解我。

我正在开发一种工具,可以在 windows 服务出现故障时通知您。

我遵循的确切逻辑是:

  1. 当服务关闭时,会正常记录您可以在 windows 事件查看器中看到的事件。我创建了一个计划任务,当服务根据 windows 事件日志停止时将被触发(感谢 XML 过滤器)。
  2. 此任务会触发一个 powershell 脚本,该脚本会向电报机器人发送请求,该机器人会在服务终止时通知我。

当我手动停止服务(来自 service.msc 或 Powershell 的 Stop-Service)时,此过程完美运行。 objective 是为了实时跟踪服务,在这种情况下工作正常。

问题来了:我无法强制服务崩溃以查看它是否在 windows 事件查看器中记录信息。

我的问题是:

  1. 如果发生错误,windows 会正常关闭服务(比如使用 Stop-Service 时)还是会在不注册任何日志信息的情况下终止进程(比如使用 taskkill /f 时)?
  2. 还有其他建议吗?有没有另一种方法可以实时跟踪 windows 服务并触发脚本,而无需每隔一定时间运行一次循环。

希望大家理解我:)

如果服务崩溃,您应该仍会在 Windows 日志 > 系统 下的事件日志中看到一条错误消息。 来源 将是“服务控制管理器”,事件 ID 应该是 7031、7032 或 7034。

因此,您可以为这些事件添加一个过滤器,并让您的 PowerShell 脚本 运行 处理这些类型的事件。