2010-04-03 5 views
3

Я пишу в журнал событий из моей Windows Forms приложение работает на Windows 7, и я получаю это сообщение в журнале событий:Windows Forms Журнал событий

описание для события ID X из исходного приложения Не может быть найдено. Либо компонент, который повышает это событие, не установлен на вашем локальном компьютере, или установка повреждена. Вы можете установить или восстановить компонент на локальном компьютере.

Если событие возникло на другом компьютере, отображаемая информация должна была быть сохранена вместе с событием.

Следующая информация была включена с событием:

Сведения об исключении

ресурс сообщение присутствует, но сообщение не найдено в таблице строк/сообщение

Мой лесозаготовительной код:

public void Log(Exception exc) 
{ 
    EventLog.WriteEntry(
     "Application", 
     exc.ToString(), 
     EventLogEntryType.Error, 
     100); 
} 

Мой вход в Windows Forms обычно выполняется в БД, но в этом случае решил использовать журнал событий. Обычно я использую журнал событий в приложениях ASP.NET, но они находятся на XP Pro локально и Windows Server 2003 на веб-боксах.

Это вещь Windows 7 или Windows Forms, и что мне делать, чтобы исправить это? Благодарю.

+0

Какова трассировка стека и/или источник сообщения? –

+0

Это сообщение в журнале событий – blu

ответ

2

См. http://support.microsoft.com/kb/307024, в частности, не забудьте создать источник событий.

+2

Также обратите внимание на то, что для этого процесса, создающего источник события, имеется соответствующее разрешение. –

+0

+1 для комментария о создании источника события.Здесь этого не хватает. –

+0

Да, не знаю, как я это пропустил. Теперь о эпической борьбе с ОАК. – blu

0

Первым параметром этой перегрузки является «Источник, с помощью которого приложение зарегистрировано на указанном компьютере». documented here Если этот источник, как в вашем случае, «Приложение», вы получаете это поведение. (Может быть, вы mistakingly думаю, первый параметр относится к Windows, Вход: Application, Security и т.д.)

Чтобы зарегистрировать ваш источник сделать это:

public void Log(Exception exc){ 
    if(!EventLog.SourceExists("MySource")) 
    { 
     EventLog.CreateEventSource("MySource", "MyNewLog"); 
     return ; 
    } 
    EventLog.WriteEntry(
    "MySource", 
    exc.ToString(), 
    EventLogEntryType.Error, 
    100); } 
0

Это решение работает для меня:

В реестре Windows 7 или Win 2008 R2 есть ключ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ CustomEventLog под этим ключом - все зарегистрированные источники достоверности для этого журнала событий.

При попытке записи в журнал событий с источником, который не является допустимым (не является ключом под HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ CustomEventLog), он перечисляет другие ключи журнала событий, чтобы увидеть если там есть источник.

Я добавил все отсутствующие источники в HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ CustomEventLog. Просто создайте копию существующих ключей под этим ключом и переименуйте его в свой EventSource.

Смежные вопросы