2011-09-13 79 views
11

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

Windows不能在本地计算机

错误1053年上启动的MyService服务:该服务没有启动或控制及时 请求作出回应。

为了找出这个错误,我试着评论一切。主要方法如下:

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的错误消息需要更长的时间。 Main方法似乎必须退出(没有错误)。

+0

确保你捕获所有未处理的异常并写入米到你的日志。例如:http://stackoverflow.com/questions/58280/unhandledexception-handler-in-a-net-windows-service ...这可能会给你更多的信息,为什么它失败。 –

回答

15

你缺少ServiceBase.Run电话:

ServiceBase[] servicesToRun = new ServiceBase[] 
           { 
            new MyService() 
           }; 
ServiceBase.Run(servicesToRun); 

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

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; 
    } 
} 
+1

另外,如果您想调试服务初始化,您可以在初始化代码中调用System.Diagnostics.Debugger.Break()。当到达此行时,Windows会询问您是否要启动调试器,这将使您能够从该点调试服务。 – Polyfun

+1

谢谢。 ServiceBase.Run(servicesToRun);该流程在该流程中已被注释掉。 –

+1

对我来说,这是调试条件设置为不调用'ServiceBase.Run(serviceToRun)运行;很多答案之后' – absynce

相关问题