C# Windows服务将不会启动(错误1053)

C# Windows服务将不会启动(错误1053),c#,windows-services,C#,Windows Services,我有一个正在调试的Windows服务。现在,即使使用当前代码,它也无法启动。错误是: Windows无法在本地计算机上启动MyService服务 错误1053:服务未响应启动或控制 及时提出请求 为了隔离错误,我尝试注释掉所有内容。主要方法如下所示: TextWriter tt = new StreamWriter(@"C:\startup.text", true); tt.WriteLine("Starting up the service"); tt.Close(); ServiceBas

我有一个正在调试的Windows服务。现在,即使使用当前代码,它也无法启动。错误是:

Windows无法在本地计算机上启动MyService服务

错误1053:服务未响应启动或控制 及时提出请求

为了隔离错误,我尝试注释掉所有内容。主要方法如下所示:

TextWriter tt = new StreamWriter(@"C:\startup.text", true);
tt.WriteLine("Starting up the service");
tt.Close();

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
   { 
       new MyService()
   };

TextWriter tt2 = new StreamWriter(@"C:\startup.text", true);
tt2.WriteLine("Run...");
tt2.Close();
它将“启动服务”和“运行…”打印到日志文件中。我还剥离了MyService的内部,因此它是空的。任何代码都有一个try/catch,它现在被简化为上面的一些日志行。我从不输入catch语句,它会记录它

OnStart中的所有内容都已被注释掉:

protected override void OnStart(string[] args)
{
}
所以我基本上没有想法了。我认为错误是因为Start方法从未完成(或在30秒内没有完成)。是否还有其他方法被调用?欢迎提出任何意见

额外信息:MyService中的构造函数为空。如果我插入一些Thread.Sleep(5000)行,则需要更长的时间才能弹出关于错误1053的错误消息。主方法似乎必须退出(没有错误)

您缺少呼叫:

订阅未处理的异常通知也是一个好主意:

static void Main() {
    ...
    AppDomain.CurrentDomain.UnhandledException 
                                      += CurrentDomain_UnhandledException;
    ...
}

private static void CurrentDomain_UnhandledException(
                                                 Object sender, 
                                                 UnhandledExceptionEventArgs e) {

    if (e != null && e.ExceptionObject != null) {
        // log exception:
    }
}
并将以下try/catch添加到OnStart,因为.NET/SCM会吞噬异常:

protected override void OnStart(String[] args) {
    try {

    } catch(Exception e) {
        // log exception:
        throw;
    }
}

虽然这个帖子已经很老了,但这里是我的补充答案,因为它可能会帮助其他人节省时间,我花了一些时间:

形势

  • 用C#编写的Windows服务可以监视目录并将解析的消息从文件发布到MQTT主题,在Win10上运行良好,在家中对WinXP进行短期测试时也可以正常运行

  • 在生产环境中,服务在Win10上运行正常,在WinXP上运行数小时后崩溃,无法重新启动(无法在本地计算机上启动filemqttservice服务。错误1053:该服务未及时响应启动或控制请求。

解决方案


清除事件日志历史记录!(Doh!)我的服务太过健谈,无法在几个小时内填满事件日志缓冲区。清除事件日志后,服务再次启动。当然,我从服务中删除了所有生成消息的行

只需检查.net framework的两侧,它应该是相同的,或者安装端的Farmwork应该比develop更高

确保捕获所有未处理的异常并将其写入日志。例如:。。。这可能会为您提供有关失败原因的更多信息。此外,如果您想调试服务初始化,可以在初始化代码中调用System.Diagnostics.Debugger.Break()。当到达这一行时,Windows将询问您是否要启动调试器,这将使您能够从此点调试服务。谢谢。ServiceBase.Run(servicesToRun);行在过程中被注释掉。对我来说,它是调试条件集,不调用
ServiceBase.run(serviceToRun)就可以运行这在我的情况下起了作用,帮助了我即将发疯的队友。谢谢!!!请使用评论部分获得非解决方案答案。
protected override void OnStart(String[] args) {
    try {

    } catch(Exception e) {
        // log exception:
        throw;
    }
}