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

有帮助吗?

解决方案

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

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

(新闻组不见了)

其他提示

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

以下示例完成了三件事。 1 - 设置ExitCode会为最终用户生成有用的消息。它不会影响Windows应用程序日志,但会在系统日志中包含一条消息。 2 - 呼叫停止导致“服务成功停止”应用程序日志中的消息。 3 - 将异常结果抛出到应用程序日志中的有用日志条目中。

protected override void OnStart(string[] args) {

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

}

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top