2

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

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() 中的服务?

4

3 回答 3

2

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

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

编辑:抱歉,这是@Lloyd 答案的扩展(不能发表评论)。


更新:

实际上考虑它只是向Try Catch您添加一个块就OnStart()足以捕获异常(请参阅 OP 上的@Oded 评论)并允许您关闭服务并以您认为合适的方式记录到事件日志。

于 2012-11-20T12:55:26.810 回答
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

于 2012-11-20T12:28:25.317 回答
0

做奥德说的。抛出异常并且不捕获它是目前处理此问题的最佳方法。

于 2012-11-20T13:30:28.353 回答