13

我有一个windows服务无法启动,出现错误“错误1053:服务没有及时响应启动或控制请求”。

在调试器中运行服务工作正常,如果我双击远程机器上的service.exe,就会弹出一个控制台窗口,并继续运行而没有问题,我甚至可以看到日志消息,告诉我程序正在以应有的方式处理所有事情。

该服务以前运行良好,但这是我个人第一次尝试使用程序的最新更改来部署它。我已经评估了这些更改,但无法找出它们可能会如何导致此问题,尤其是因为当不是作为服务启动时,一切都运行良好。

服务实现的StartRoutine()方法为空,因此应该“及时”返回。

我已经检查了计算机上的事件日志,除了在30秒的必要时间内没有收到服务的回复外,它没有提供任何其他信息。

既然它可以在我的机器上运行,并且是一个双击的可执行文件,那么我该如何找出它作为服务失败的原因呢?

哦,是的。NET2.0,因此它不应该受到1.1框架错误的影响,该错误显示了这种症状(http://support.microsoft.com/kb/839174)

该机器是一台运行SP2的windows server 2003 R2机器。

1
  • 1
    尝试启动时出现此错误。仅在具有的服务器上使用NET 4.0编译的服务。已安装Net 2.0
    – 霍夫兰
    评论 2012年7月12日7:45

10个答案10

重置为默认值
6

这是一个误导性错误。这可能是一个未处理的异常。

清空OnStart()处理程序,然后在构造函数中尝试此操作。。。

公共主服务(){InitializeComponent();尝试{//所有初始化代码都在这里。//例如,我的异常是由于缺少注册表权限引起的;}catch(异常ex){事件日志。WriteEntry(“应用程序”,例如ToString(),EventLogEntryType。错误);}}

现在检查系统上的EventLog以查找应用程序错误。

4

可能有很多问题,在显示问题的机器上获取堆栈跟踪可能会有所帮助。有很多方法可以做到这一点,但关键是你必须看到这在代码中哪里失败了。

你可以用远程调试,但一件简单的事情可能只是记录到事件记录器,或者如果有文件日志的话。从字面上看,将“WriteLine(”At class::function()“)”放在代码的各个部分,看看是否已经做到了。

这至少会让您看到正确的方向(最终是代码)。

更新:

查看Microsoft的如何调试Windows服务有关使用WinDbg解决启动问题的详细信息,请参阅文章。

这个相关问题详细介绍调试编写的服务的好方法。净利润。

1
  • 在典型的微软风格中,链接的文档页面已经完全改变了。。。没有提到WinDbg或任何其他在中运行服务的有用方法实际的调试器.我们真的应该WriteLine(写入行)到处打电话??如果您的日志文件甚至不能从服务中工作,但从控制台应用程序中一切正常,该怎么办?这个问题似乎没有好的解决方案,这让我想在雷蒙德投下一枚核弹:@
    – 肯尼83
    评论 2020年10月5日12:08
1

我同意Scott的观点,最简单的方法就是在启动代码中添加一些跟踪信息(也许它甚至不会出现在您的启动代码中)。

如果这没有帮助,您可以在此处发布代码,以便其他人可以查看。

1

也许缺乏一些依赖性,试试这个:
-注销您的服务
-再次注册

如果寄存器失败,则表示缺少模块。

1

如果StartRoutine为空,则可能是在其他地方启动它。

IIRC需要启动一个工作线程,然后从StartRoutine返回。

1
  • 看起来代码是通过挂接ServiceBase来执行的。Elapsed事件,它挂接到构造函数中(它以前也这样做,当它工作时)
    – 马特
    评论 2009年4月27日15:11
1

可能导致此错误的一个问题是,如果需要部署的windows服务包含一些错误,即可能是简单的授权错误或其他错误,例如在我的案例中,我引用了一些不存在的文件夹和文件进行日志记录,但当提供了这些文件和文件夹的正确路径时,它解决了我的问题。

0

我浏览了关于这个特定主题的每一篇帖子,但没有一篇回复解决了这个问题,所以我添加了这个回复,以防这对其他人有所帮助。诚然,这只适用于新服务,而不适用于此特定情况。

我在写一个文件监听服务。作为一个控制台应用程序,它工作得很好。当我将其作为服务运行时,出现了与上面相同的错误。我不知道的是(许多关于服务的MSDN文章都很方便地省略了),您需要从ServiceBase中执行类。运行(YourClassName());。否则,您的应用程序会执行并立即终止,因为它已终止,所以即使没有发生错误或异常,您也会收到上述错误。这是一篇关于这方面的文章的链接。它实际上讨论了如何设置应用程序以实现两用-控制台应用程序和服务:创建组合命令行/Windows服务应用程序

0

我有这个问题,问题的根源是配置文件。我在记事本中编辑了它,记事本添加了一个特殊字符,这会导致服务无法正常运行,因为配置文件被破坏了。我在notepad++中看到了这个特殊的字符,删除它后,服务开始像以前一样成功运行。

0

就我而言,这是正确的。NET framework未安装在我安装Windows服务的服务器上。

-2

另一个原因是,如果您以“调试”模式将DLL复制到安装文件夹,则会出现此问题。你需要做的是在“发布”模式下运行项目,复制DLL或直接从Release文件夹而不是Debug文件夹,然后将该DLL复制到安装文件夹中,它就会工作。你可以看到DLL大小的减小,它不会包含任何调试符号,诸如此类

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.