启动Windows服务失败,错误1053

时间:2009-04-27 14:24:32

标签: windows-services .net-2.0 windows-server-2003

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

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

此服务以前运行良好,尽管这是我第一次亲自尝试使用最新的程序更改部署它。我已经评估了这些变化,并且无法弄清楚它们是如何导致这个问题的,特别是因为一切都运行良好而不是作为服务启动。

服务impelmentation的StartRoutine()方法是空的,因此应该以“及时的方式”返回。

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

由于它可以在我的机器上运行,并且作为双击的可执行文件,我如何才能找出它作为服务失败的原因?

哦,它是.NET 2.0,所以它不应该受到出现这种症状的1.1框架错误的影响(http://support.microsoft.com/kb/839174

该框是运行SP2的Windows Server 2003 R2计算机。

10 个答案:

答案 0 :(得分:5)

这是一个误导性的错误。这可能是一个未经处理的例外。

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

    public MainService()
    {
        InitializeComponent();

        try
        {
            // All your initialization code goes here.

            // For instance, my exception was caused by the lack of registry permissions
            ;
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry("Application", ex.ToString(), EventLogEntryType.Error);
        }
    }

现在检查系统上的EventLog是否存在应用程序错误。

答案 1 :(得分:4)

可能是一些事情,它可能有助于在显示问题的机器上获得堆栈跟踪。有很多方法可以做到这一点,但重点是你必须在代码中看到失败的地方。

您可以使用remote debugging执行此操作,但一件简单的事情可能只是登录到事件记录器,如果有,则可以是文件记录。从字面上看,在代码的各个部分放置“WriteLine(”at class :: function()“),看看你是否已经在那里。

这至少可以让你看到正确的方向(最终是代码)。

<强>更新

有关使用WinDbg解决启动问题的详细信息,请参阅Microsoft的How to Debug Windows Services文章。

这个related question详细介绍了调试用.NET编写的服务的好方法。

答案 2 :(得分:1)

我同意Scott的观点,找出正在发生的事情的最简单方法是在启动代码中添加一些痕迹(可能它甚至没有出现在您的启动代码中)。

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

答案 3 :(得分:1)

也许缺乏某种依赖性,试试这个:
- 取消注册您的服务
- 再次注册

如果注册失败意味着缺少模块。

答案 4 :(得分:1)

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

IIRC你需要关闭一个工作线程,然后从StartRoutine返回。

答案 5 :(得分:1)

可能导致此错误的问题之一是,如果需要部署的Windows服务包含一些错误,即它可能是简单的授权错误或任何事情,就像在我的情况下我引用了一些用于记录的文件夹和文件不存在,但当提供这些文件和文件夹的正确路径时,它解决了我的问题。

答案 6 :(得分:0)

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

我正在写一个文件监听服务。作为控制台应用程序,它完美地工作。当我将其作为服务运行时,我得到了与上面相同的错误。我不知道的(许多关于服务的MSDN文章很容易遗漏)是你需要在ServiceBase.Run(YourClassName());中执行你的类。否则,您的应用程序会执行并立即终止,并且因为它终止,即使没有发生错误或异常,您也会收到上述错误。这是一篇关于此的文章的链接。它实际上讨论了如何设置您的应用程序以供双重使用 - 控制台应用和服务:Create a combo command line / Windows service app

答案 7 :(得分:0)

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

答案 8 :(得分:0)

就我而言,我正在安装Windows服务的服务器上没有安装正确的.NET框架。

答案 9 :(得分:-2)

另一个原因是如果您将'debug'模式下的DLL复制到安装文件夹,则会出现此问题。您需要做的是在'Release'模式下运行项目复制DLL或直接从Release文件夹而不是Debug文件夹,并将该DLL复制到安装文件夹,它将工作。你可以看到DLL的大小减少,它不会包含任何调试符号和那样的