【问题标题】:The service did not respond to the start or control request in a timely fashion服务没有及时响应启动或控制请求
【发布时间】:2010-08-27 08:44:16
【问题描述】:

我在 win32,c++ 中创建了一个服务。我可以创建服务,但是当我尝试启动它时,它会出现以下错误。

[SC] 启动服务失败 1053: 服务没有及时响应启动或控制请求。

找到根本原因的最佳方法是什么,因为此错误消息没有传达任何意义

【问题讨论】:

  • 我敢打赌,你没有正确启动服务控制调度程序,但是你的帖子太模糊了,没有人有水晶球可以为你调试你的问题。
  • 带有安装组件的 c# 空服务存在相同问题。启动时只是这个模糊的错误。 protected override void OnStart(string[] args) {} 为空,因此其他任何操作都不会失败。见鬼

标签: c++ winapi service


【解决方案1】:

调试服务很难。这些天来,我更喜欢编写一个完成所有工作的类库,一个只调用类库的一个方法的服务,以及一个调用相同方法的测试工具(通常是控制台应用程序)。这样我就可以在调试器中运行测试工具并消除大部分错误。

当您的服务无法启动时,您往往会收到两条消息,一条是您刚刚收到的消息,另一条是“它已启动但随后停止”,这通常意味着它引发了异常。如果您正在编写“醒来看看是否是午夜”之类的服务,您的通常意味着循环不良或睡眠时间过长。但实际上,通过测试工具在调试器下运行它是深入了解正在发生的事情的最佳方式。

【讨论】:

  • 我很想...但我的服务没有做任何事情,而且仍然出现此错误。
【解决方案2】:

这篇文章是很久以前的事了,但我正在为那些正在寻找解决方法的未来程序员写这篇文章。

我遇到了同样的问题,花了几个小时找出问题所在。

错误信息:

服务没有....

可能会在尝试运行您的服务后立即返回主函数(通过SERVICE_TABLE_ENTRY 传递给StartServiceCtrlDispatcherW)时导致。

除非 SC 告诉它停止,否则不应返回 SC 运行的 main 函数。

代码如下:

void CServiceManager::Start(DWORD _dwArgc, LPWSTR * _argv)
{
    // Your performing code.
    // ....

    ::SetServiceStatus(SERVICE_RUNNING); // Roughly

    // Prevent CServiceManager::Start from returning.
    ::WaitForSingleObject(YourExitEvent, 0); 
}

此外,您不应忘记在退出代码中传递 SERVICE_STOPPPED 并调用 SetEvent

【讨论】:

    【解决方案3】:

    请注意,如果您在启动服务时执行了长时间操作,则可能会出现错误。 SC 等待启动操作完成 30 秒,然后报告失败。

    【讨论】:

      【解决方案4】:

      找出根本原因的最佳方法是检查 SERVICE_STATUS_PROCESS.dwCheckPoint 值。当您的服务处于 START_PENDING 状态时,您的服务正在更新它,您可以使用sc query 从命令行轮询它。

      【讨论】:

        【解决方案5】:

        我在使用原始 MinGW(旧的)编译 windows 服务时遇到了这个问题。 只需切换到最新的 MinGW-64 即可解决问题

        编辑:事实证明,这只是服务找不到所需的 mingw DLL 的问题。使用 -static 标志编译也解决了这个问题

        【讨论】:

          猜你喜欢
          • 2018-04-20
          • 1970-01-01
          • 2011-03-28
          • 2014-08-05
          • 2011-01-05
          • 1970-01-01
          • 2014-04-08
          • 2011-12-29
          相关资源
          最近更新 更多