我有一个使用EventLog进行日志记录的Windows服务应用程序。在app安装程序中,我运行:
eventcreate /L APPLICATION /SO "My App" /T SUCCESS /id 1 /D "Initialised Log"
然后在C#中的应用程序记录器中执行:
EventLog.WriteEntry(message, EventLogEntryType.Error, 1, 0, details);
然而,当我查看Application EventLog时,除了我的事件之外,我还看到了具有EventID 0的条目。我不能使用eventcreate来创建ID = 0条目(ID必须是> = 1)。那么创造这些事件是什么?并且有没有办法阻止事件日志抱怨已损坏的安装?
一个示例条目说:
活动中包含以下信息:
服务已成功启动。
消息资源存在,但在字符串/消息表
中找不到该消息
答案 0 :(得分:3)
你收到的文字是:
找不到源myApp中的事件ID 0的描述。引发此事件的组件未安装在本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复该组件。
在所有事件日志条目的前面,请输入正确的错误?
我在使用eventcreate后得到了这个,只能通过编辑注册表来解决问题
HKLM\System\CurrentControlSet\Services\Eventlog\Application\MyEventSource
customSource (1)
EventMessageFile %SystemRoot%\System32\EventCreate.exe
TypesSupported (7)
我将此更改为
EventMessageFile C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll
然后我所有的事件日志条目(甚至是旧条目)看起来都没有抱怨腐败
答案 1 :(得分:2)
ServiceBase
类的属性为 AutoLog ,默认情况下为 true 。这意味着它将自动报告状态更改,如“开始”,“停止”,“暂停”和“继续”。 MSDN documentation is here
如果要将信息报告给自定义日志而不是应用程序日志,或者如果要取消这些事件日志条目,则应将 AutoLog 设置为 false 在你的构造函数中。