我最近在部署Windows服务时遇到了问题.四台计算机没有造成任何问题,但在第五台计算机上由于异常而导致启动服务的任何尝试都失败了.异常堆栈跟踪被写入事件日志,因此我应该很容易确定原因:
protected override void OnStart(string[] args)
{
    EventLog.WriteEntry("Starting service", EventLogEntryType.Information);
    try
    {
        //...
        base.OnStart(args);
    }
    catch (Exception ex)
    {
        EventLog.WriteEntry("Service can not start. Stack trace:" + ex.StackTrace, EventLogEntryType.Error);
        Stop();
        return;
    }
    EventLog.WriteEntry("Service started", EventLogEntryType.Information);           
}
但是,唉,没有任何信息写入日志.我终于将它追溯到正在编写的第一个日志条目.它引发了一个异常,因为应用程序事件日志已满,包含最近的条目,并且配置为仅覆盖超过7天的条目.
考虑到我无法更改应用程序事件日志的配置,写入事件日志的最佳做法是什么?
我应该总是放入EventLog.WriteEntry一个try块,如果是,我应该如何处理异常(将它写入事件日志可能是一个坏主意),我应该检查我的OnStart方法中的事件日志状态,还是你有更好的建议?
精简版:
应用程序事件日志中是否始终包含事件源"应用程序"和"应用程序错误"?它们是否适用于Windows XP,Vista和Windows 7的新安装?使用它们而不是创建我自己的源(对我来说是不可能的)真的很糟糕吗?
长版:
我有一个ClickOnce应用程序,用户在没有管理员权限的情况下使用它们.
当我尝试写入Appliction事件日志时,我收到安全异常.(Windows事件日志记录基础结构正在尝试创建一个新的事件源,并获得安全性违规.)
所以我想尝试重用现有的事件源.我在应用程序事件日志中找到了两个"通用声音"源.这些是否始终是Windows安装的一部分,并且会做出合理的选择?
我确信这是不赞成的,因为我应该使用自己的事件源来区分我的应用程序.但这是因为不常发生的致命错误,应该通过我的代码记录到其他地方.我只想要一个非常容易的地方在客户端机器上找到它们以防万一出错...