Ошибка в том, что вы не можете достичь этого с помощью 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>