Строка описания для ссылки на параметр (% 1) не найдена - PullRequest
0 голосов
/ 12 июня 2018

Я получаю это исключение при попытке чтения из журнала Windows с использованием метода C # EventRecord.FormatDescription():

System.Diagnostics.Eventing.Reader.EventLogException: The description string for parameter reference (%1) could not be found
   at System.Diagnostics.Eventing.Reader.EventLogException.Throw(Int32 errorCode)
   at System.Diagnostics.Eventing.Reader.NativeWrapper.EvtFormatMessageRenderName(EventLogHandle pmHandle, EventLogHandle eventHandle, EvtFormatMessageFlags flag)
   at System.Diagnostics.Eventing.Reader.ProviderMetadataCachedInformation.GetFormatDescription(String ProviderName, EventLogHandle eventHandle)

Исключение происходит, когда текст события содержитстрока %%, за которой следует длинное число (некоторые события из источника, который я не контролирую, содержат этот шаблон).Эти %% предназначены для того, чтобы быть просто текстом, я не ожидаю, что Windows разберется в этом вопросе.

Знаете ли вы, что я могу сделать, чтобы .Net не выдавал эту ошибку, когда текстсобытие содержит этот шаблон?

Вот команды PowerShell, которые вызовут исключение в следующий раз, когда вы попытаетесь прочитать событие из программы на C #:

New-EventLog -LogName Application -Source MyApp
Write-EventLog -Source MyApp -LogName Application -Message "%%4294967295" -EventId 3

1 Ответ

0 голосов
/ 21 июня 2018

Обходной путь, который я в итоге реализовал, выглядит следующим образом:

    private string FormatEventDescription(EventRecord eventRecord)
    {
        try
        {
            return eventRecord.FormatDescription();
        }
        catch (EventLogException e)
        {
            return eventRecord.ToXml();
        }
    }

Это менее чем удовлетворительно, так как этот XML не удобен для пользователя, но, по крайней мере, он содержит всю информацию, необходимую в случае необходимостизнать оригинальное содержание EventRecord.Обратите внимание, что XML не обязательно содержит строку описания внутри, иногда эти события содержат список параметров, которые используются для заполнения шаблона сообщения для генерации строки описания, поэтому в этом случае вы получите необработанные параметры.

...