当前位置:  开发笔记 > 编程语言 > 正文

处理服务启动时的异常

如何解决《处理服务启动时的异常》经验,为你挑选了3个好方法。

我正在编写一系列Windows服务.如果在启动期间抛出错误(在OnStart()方法中),我希望它们失败.我曾经假设只是抛出一个错误OnStart()就可以做到这一点,但我发现它反而"开始"并向我显示一条消息,说明"服务已启动,但是处于非活动状态.这是正确的吗?" (释义).如何处理错误,实际上无法启动服务?



1> Sean..:

如果您想要的主要内容是服务窗口报告存在错误,从我尝试过(Windows 7上的.net 3.5),唯一的方法是设置ExitCode.我建议将其设置为13816,因为这会导致出现"发生未知错误"的消息.请参阅Windows错误代码.

下面的示例完成了三件事.1 - 设置ExitCode会为最终用户生成有用的消息.它不会影响Windows应用程序日志,但会在系统日志中包含一条消息.2 - 调用Stop会导致应用程序日志中出现"Service successfully stopped"消息.3 - 将异常结果抛出到应用程序日志中的有用日志条目中.

protected override void OnStart(string[] args) {

  try {
    // Start your service
  }
  catch (Exception ex) {
    // Log exception
    this.ExitCode = 13816;
    this.Stop();
    throw;
  }

}


这是一个非常好的观点.也许,代码1064会更好.(ERROR_EXCEPTION_IN_SERVICE - 处理控制请求时服务中发生异常.)我的主要想法是向用户显示一条有些帮助的消息,特别是没有误导性.

2> Steven A. Lo..:

如果您运行的是.NET 2.0或更高版本,则可以使用ServiceBase.Stop从OnStart停止服务.否则从新线程调用Stop.

ref [devnewsgroups](http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx)

(新闻组不见了)



3> StingyJack..:

将所有启动逻辑移动到单独的方法,并从该单独的方法中抛出异常(或调用OnStop).

OnStart在启动时有一些奇怪之处.我发现如果OnStart()中只有一行,那么我就不会得到"服务已启动然后停止.如果没有工作要做,则会自动停止服务"消息,抛出的异常将终止处理并登录到应用程序事件日志.

使用单独的启动方法,您可以使用这样的技术来调试它而不需要附加.http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有