我遇到了将事件写入Windows事件日志的问题。我查看了帖子,我认为我正确地做了,但我仍然在事件查看器中收到以下错误:
消息资源已存在但消息未在字符串/消息表中找到
有没有人对我遗失的内容有任何想法?
我在WIX安装程序中创建了事件源:
<Fragment>
<PropertyRef Id="NETFRAMEWORK35"/>
<PropertyRef Id="NETFRAMEWORK20"/>
<PropertyRef Id="NETFRAMEWORK20INSTALLROOTDIR"/>
<PropertyRef Id="NETFRAMEWORK20INSTALLROOTDIR64" />
<Component Id='EventSource'
Directory='INSTALLDIR'
Guid='F382AAC5-F7C5-46A4-95CF-EA7724DXXXXX' >
<Condition>ALLUSERS</Condition>
<?if $(var.Platform) = x64 ?>
<util:EventSource Log='Application'
Name='MySource'
EventMessageFile='[NETFRAMEWORK20INSTALLROOTDIR64]EventLogMessages.dll'
KeyPath='yes' />
<?else ?>
<util:EventSource Log='Application'
Name='MySource'
EventMessageFile='[NETFRAMEWORK20INSTALLROOTDIR]EventLogMessages.dll'
KeyPath='yes' />
<?endif ?>
</Component>
</Fragment>
这是我写入事件日志的C#代码:
public class Log
{
private const string EventSource = "MySource";
private const string EventLog = "Application";
private static EventLog _logger = null;
private static void InitLogger()
{
if (!System.Diagnostics.EventLog.SourceExists(EventSource))
{
System.Diagnostics.EventLog.CreateEventSource(EventSource, EventLog);
}
_logger = new EventLog() { Source = EventSource, Log = EventLog };
}
public static void Write(EventLogEntryType entryType, string format, params object[] args)
{
string entry = _Format(format, args);
try
{
if (_logger == null)
InitLogger();
_logger.WriteEntry(entry, entryType, 1);
}
catch (Exception ex)
{
Tracer.Misc.Error("Could not write to event log: {0}", entry);
}
}
private static string _Format(string format, object[] args)
{
if ((args == null) || (args.Length == 0))
return format;
try
{
return String.Format(format, args);
}
catch (Exception e)
{
return format + " [Format Exception:" + e.Message + "]";
}
}
}
答案 0 :(得分:3)
我想出了我的问题。我的代码很好。问题在于我使用的EventSource的名称。事件源包含空格和短划线。当我删除那些它工作。
即。从'我的事件 - 来源'到'MyEventSource'
答案 1 :(得分:0)
此外,如果您正在登录“应用程序”(仅供参考,对于那些计算事件记录的人,正如我现在所做的那样,事件来源也不能是“应用程序”。不是答案)。它会将日志记录详细信息提供如下 -
来自源应用程序的事件ID 101的描述不能 找到。未安装引发此事件的组件 您的本地计算机或安装已损坏。你可以安装 或修复本地计算机上的组件。
如果事件源自另一台计算机,则显示信息 不得不与事件一起得救。
活动中包含以下信息:
日志消息示例
消息资源存在,但未在消息中找到消息 字符串/消息表