错误后如何停止服务?

时间:2012-11-20 12:26:07

标签: c# windows-services

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

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()中退出和停止服务,而不显示事件日志"服务已成功启动"?

3 个答案:

答案 0 :(得分:2)

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

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

修改:抱歉这是@Lloyd答案的延伸(无法发表评论)。


<强>更新

实际上只是在Try添加Catch OnStart()块时,应该足以捕获异常(请参阅关于OP的@Oded评论)并允许您关闭服务并记录您认为合适的事件日志。

答案 1 :(得分: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

答案 2 :(得分:0)

做Oded说的话。抛出和异常并且不抓住它是目前处理此问题的最佳方法。