gpt4 book ai didi

.net - 消息资源存在,但在字符串/消息表中找不到该消息

转载 作者:行者123 更新时间:2023-12-04 12:43:07 28 4
gpt4 key购买 nike

系统事件日志下有一个名为“服务控制管理器”的事件提供程序。它的 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);
}

我使用“以管理员身份运行”运行该应用程序。事件已使用正确的事件 ID、来源等写入系统日志。但描述为“存在消息资源,但在字符串/消息表中未找到消息”插入“测试服务进入 %2 状态” .

我的错误是什么?

最佳答案

错误在于您无法使用 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,表明我们有客户代码。

以管理员身份运行此代码在事件日志中给出:

The foobar service entered the running state.



使用这个 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>

关于.net - 消息资源存在,但在字符串/消息表中找不到该消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6051279/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com