c# - 错误后如何停止服务?

标签 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() 中退出并停止服务而不让事件日志显示“服务已成功启动”?

最佳答案

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

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

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


更新:

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

关于c# - 错误后如何停止服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13473196/

相关文章:

c# - Android,尝试在 Xamarin Android 应用程序中查看 PDF

c# - 部署 roslyn 应用程序

c# - Environment.GetFolderPath(...CommonApplicationData) 在 XP 和 Server 2003 上返回空字符串

windows-services - 如何获取 CreateProcessAsUser 的有效用户 token ?

c# - Windows 服务设计帮助

c# - Web API 的动态 LINQ 查询

c# - 如何告诉应用程序在抛出异常后停止处理

asp.net - 从 ASP 启动/停止服务。网页

java - 使用 NSSM 在 Windows 服务中启动 NodeJs 子进程不起作用

java - if(a&&b) 是否应该比 if(a) if(b) 花费更多时间?