【问题标题】:Windows service control charactersWindows 服务控制字符
【发布时间】:2010-12-29 00:12:31
【问题描述】:

我创建了一个 Windows 服务并想向它发送一个 control+B 或 control+C 控制值。我知道我可以使用 sc 控制,但我想知道是否有一个位置包含我可以发送的所有可能值。有一个 sc 停止方法,但我希望向它发送一个控制字符。

【问题讨论】:

  • Windows 服务由 Windows 服务控制管理器 (SCM) 管理,可使用 sc 命令访问。为什么该命令(或net start/stop)还不够?这还不够的用例是什么?如果您正在寻找sc 工具的文档,只需在命令提示符下输入sc,您就会看到可以发送的“所有可能的值”。
  • 我同意我应该使用 net stop 或 sc stop,但它们不会优雅地关闭服务,我正在寻找一种使用 control+B 关闭服务的方法。 Control+B 类似于 control+C,除了 B 在 windows 中更优雅地关闭。
  • net stop 确实会优雅地关闭服务,因为该服务会收到一个 OnStop 事件来响应和清理。这是否只是一个包装在某些服务包装器中的常规 EXE 服务?

标签: command-line windows-services control-characters


【解决方案1】:

服务关闭的“优雅”完全取决于您的服务如何响应请求。如果您正在编写服务,那么当 SCM 发送“停止”请求时,您可以完全控制服务的响应方式。收到请求后,您有有限的时间(Windows 决定多少时间)来停止您的服务并响应控制请求。如果您未能及时响应,Windows 可能会不正常地终止您的服务进程。

控制台应用程序可以使用 SetConsoleCtrlHandler() 函数响应 Ctrl+C 请求。但是,服务进程不是在控制台窗口中运行的,所以这个处理程序完全不适用于服务。

【讨论】:

  • 经过更多调查后,我发现当我通过命令行启动服务 (sc start) 时,我得到如下状态: (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) 。我认为 ignores_shutdown 可能是问题的原因。
猜你喜欢
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
相关资源
最近更新 更多