2012-11-20 73 views
1

我需要优雅地处理我的代码中的错误并停止服务。如何在错误后停止服务?

protected override void OnStart(string[] args) 
{ 

    oMyObject = new MyObject(args); 
    if (oMyObject.RunStartup()) 
    { 

     oThread = new Thread(new ThreadStart(oMyObject.MainLoop)); 
     oThread.Start(); 

    } 

    base.OnStart(args); 

} 

oMyObject.RunStartup()向事件日志中写入错误,如果错误返回false。

但是,服务未停止,并且事件日志显示“服务已成功启动”。

如何在没有显示“服务已成功启动”的事件日志的情况下退出并停止OnStart()中的服务?

+2

[异常处理](http://msdn.microsoft.com/en-gb/library/vstudio/ms229005.aspx) – Oded

回答

0

做了什么Oded说。投掷和异常,不要抓住它是处理这个问题的最好方法。

0

如果我还记得你可以打电话Stop(),如:

protected override void OnStart(string[] args) 
{ 

    oMyObject = new MyObject(args); 

    if (!oMyObject.RunStartup()) { 
     Stop(); 
     return; 
    } 

    oThread = new Thread(new ThreadStart(oMyObject.MainLoop)); 
    oThread.Start(); 

    base.OnStart(args); 

} 

在这里看到更多的信息:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.stop.aspx

+1

此处的问题是,事件日志中显示“服务已成功停止”的错误。 – Espen

+0

然后提出异常并返回true或false。 – Lloyd

2

您是否尝试过实施OnStop()方法,而不是试图检测站在OnStart()方法?

然后,您应该能够创建一个ServiceController实例并检查该服务的Status属性。

编辑:对不起,这是@Lloyd回答(不能留下评论)的扩展。


更新:

其实想它只是增加一个TryCatch块你OnStart()应该足以捕获异常(见OP @Oded评论),并允许你关闭服务并登录到事件日志中,看看你是否适合。

+1

解决方案不是为了捕捉异常,而是抛出异常,而不是抓住它。我试图做的是退出服务时出现错误,而不是处理错误。 – Espen