【问题标题】:Windows Service not trapping error from DLLWindows 服务未从 DLL 捕获错误
【发布时间】:2011-09-28 20:13:04
【问题描述】:

我有一个每 10 分钟运行一次的 Windows 服务。每当 DLL 出现错误时,服务都不会引发错误。如何使错误传播回 Windows 服务并让它生成事件查看器消息,甚至重新开始轮询?

        catch (Exception ex)
        {
            var errorMessage = ex.Message;
            if (ex.InnerException != null)
                errorMessage += " " + ex.InnerException.Message;

            eventLog1.WriteEntry(errorMessage, EventLogEntryType.Error);
            new Logging().LogMessageToFile(errorMessage, true);
        }

【问题讨论】:

  • 怎么知道DLL有错误?发生什么了?如果您想知道如何尝试通过您的服务来捕捉它,那么了解这一点非常重要。
  • 我将它写入事件日志和日志文件。错误就在那里......在我写入日志文件无济于事后尝试抛出它。
  • 仍然很困惑...如果您正在捕获异常并写入事件日志,那么听起来您的目标已经完成。不要忘记您必须刷新事件查看器才能看到新事件。你想做什么?你需要做这样的事情吗? catch(Exception ex) { /* todo logging here / throw ex; / 重新抛出异常 */ }
  • 我会在使用 "throw new Exception();" 登录后返回并重新抛出看看它通向哪里。会回来报告的。
  • 不,不要抛出一个新的空白异常,正确的形式是抛出你捕获的那个。我的评论格式很奇怪。

标签: dll windows-services


【解决方案1】:

问题解决了!抓到之后再扔。

catch (Exception ex)
    {
        var errorMessage = ex.Message;
        if (ex.InnerException != null)
            errorMessage += " " + ex.InnerException.Message;

        eventLog1.WriteEntry(errorMessage, EventLogEntryType.Error);
        new Logging().LogMessageToFile(errorMessage, true);

        throw;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多