【问题标题】:How to tell a Windows service to restart or reload its configuration?如何告诉 Windows 服务重新启动或重新加载其配置?
【发布时间】:2013-07-22 22:08:29
【问题描述】:

我有一个用于配置 Windows 服务的 GUI 应用程序,我想从 Thing GUI 应用程序启动、停止或重新启动该服务。

其中一个问题是该服务可以在两种模式下运行:windows 服务或从命令行手动运行(因此您有一个控制台)。

现在,我正在寻找一种沟通方式,一种适用于两种情况的方式。

指定服务进程已经拥有甚至正在处理的处理程序可能会有所帮助:

  • CTRL_C_EVENT
  • CTRL_CLOSE_EVENT
  • CTRL_BREAK_EVENT
  • CTRL_LOGOFF_EVENT
  • CTRL_SHUTDOWN_EVENT

如果我知道服务重启选项会触发什么事件,那么扩展处理程序会很容易。尽管如此,我应该能够从我的 GUI 应用程序中触发相同的事件,这样即使它在后台运行,我也可以告诉“服务器”自行重启。

如果我可以做到这一点,而不必检测服务器应用程序在哪种模式下运行,那么最好的办法就是。

【问题讨论】:

    标签: winapi events windows-services


    【解决方案1】:

    您的服务可以侦听Service Trigger Events,然后您的 GUI 可以发送事件。特别是,您想注册一个SERVICE_TRIGGER_TYPE_CUSTOM 触发器,这会导致您的服务侦听 ETW 事件;然后,您的 GUI 代码将编写 ETW 事件以触发该事件。

    【讨论】:

    • 谢谢,埃里克,这似乎就是我要找的。我希望即使我没有作为服务运行,我也可以列出这些。我去看看。
    【解决方案2】:

    没有服务重启操作。您要做的就是正常停止服务,然后再正常启动服务。这就是 SCM 重启在内部所做的全部工作,它只是在 SCM UI 中作为单个操作公开,而不是作为两个单独的选项。

    【讨论】:

      猜你喜欢
      • 2016-07-02
      • 2017-04-12
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多