Ресурс сообщения присутствует, но сообщение не найдено в таблице строк / сообщений - PullRequest
7 голосов
/ 19 мая 2011

В журнале системных событий есть поставщик событий, который называется «Диспетчер управления службами». Его EventMessageFile - %SystemRoot%\system32\services.exe. Он содержит событие с id = 7036, и это событие «Служба% 1 перешла в состояние% 2». Вы можете создать его очень просто, остановив или запустив любые службы в services.msc.

Все, что я хочу - это записать это событие в системный журнал событий самостоятельно.

Вот мой простой код регистрации:

 public static void Main()
 {      
     EventLog myNewLog = new EventLog("System", ".", "Service Control Manager");

     myNewLog.WriteEntry("Test",EventLogEntryType.Information, 7036);
 }

Я запускаю приложение с «Запуск от имени администратора». Событие было записано в системный журнал с правильным идентификатором события, источником и т. Д. Но описание было «ресурс сообщения присутствует, но сообщение не найдено в таблице строк / сообщений», в которой указано «Служба тестирования перешла в состояние% 2» .

В чем моя ошибка?

1 Ответ

3 голосов
/ 13 января 2014

Ошибка в том, что вы не можете достичь этого с помощью WriteEntry, потому что вам нужно предоставить несколько параметров, а также правильный EventIdentifier

Если вы переключитесь на WriteEvent, вы сможете достичь того, чего хотите:

 var myNewLog = new EventLog("System", ".", "Service Control Manager");

 myNewLog.WriteEvent( new EventInstance( (1 << 30) + 7036 ,0)
                    , null
                    , new object[] { "foobar","running" }
                    );

Обратите внимание, что Eventinstance подается с EventIdentifier, который имеет в своих младших 16 битах 7036, который вы нашли, но бит 30 (бит клиента) должен быть равен 1, указывая, что у нас есть код клиента.

Запуск этого кода от имени администратора в журнале событий:

Служба foobar перешла в рабочее состояние.

с этим xml:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
  <Provider Name="Service Control Manager" Guid="{some-guid-here}" EventSourceName="Service Control Manager" /> 
  <EventID Qualifiers="16384">7036</EventID> 
  <Version>0</Version> 
  <Level>4</Level> 
  <Task>0</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2014-01-13T00:13:56.000000000Z" /> 
  <EventRecordID>999999</EventRecordID> 
  <Correlation /> 
  <Execution ProcessID="0" ThreadID="0" /> 
  <Channel>System</Channel> 
  <Computer>internal.example.com</Computer> 
  <Security /> 
</System>
<EventData>
  <Data Name="param1">foobar</Data> 
  <Data Name="param2">running</Data> 
  <Binary /> 
</EventData>
</Event>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...