9

我正在尝试使用访问服务器上的“ForwardedEvents”事件日志

el = new EventLog("ForwardedEvents", serverName);

这行不通。

我相信它不起作用,因为日志不包含在 Eventlog 期望找到它的注册表中(HKLM/System/CurrentControlSet/Services/Eventlog/..)。

如何将日志添加到注册表以便找到它,或者是否有另一种方法可以访问该位置未指定的日志?

4

3 回答 3

10

通过在 (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\LOGNAME) 为日志创建新的注册表项来解决此问题。

这是由..(在 Windows Server 2008 R2 上)..

1)右键单击父文件夹(事件日志)->新建->键

2) 将密钥命名为 (C:\Windows\System32\winevt\Logs\LOGNAME) 中的 evtx 文件

3)在注册表资源管理器的右窗格中,右键单击 -> 新建 -> 可扩展字符串值

4) 将新创建的 REG_EXPAND_SZ 命名为“文件”

5)右键单击名称“文件”

6) 修改

7)在“数值数据”框中,添加 evtx 文件的路径,如

( %SystemRoot%\System32\winevt\Logs\ForwardedEvents.evtx )

于 2013-08-01T23:12:36.470 回答
4

这与此处提供的其他注册表解决方案很接近,但这是我在 Windows 7 上的做法,并将写入应用程序日志,而不是转发事件日志:

  • Windows 徽标 > 输入regedit搜索并按Enter

  • 扩张HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog

  • 找到Application密钥并为您的应用程序创建一个新密钥: MyApp

  • MyApp中,在空白区域右击右侧窗口,选择New > Expandable String Value。这将创建一个REG_EXPAND_SZ条目。给它起名字EventMessageFile

  • 双击新条目以设置值。对于值,输入: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\EventLogMessages.dll 选择OK

  • 保留(Default)字符串值及其(value not set)值。

  • CurrentControlSetControlSet001和替换再重复两次ControlSet002

如果您需要将您的应用程序移动到另一台计算机,您可以右键单击该键并选择Export. 您将文件另存为.reg文件,然后将其复制到下一台计算机。在那里,您双击运行它(以管理员身份登录时)。这样就不用手动重新创建了,对于其他的应用,其实可以.reg在记事本里面编辑文件,简单的改一下应用的名字,保存(一定要把格式改成“全部Files”,所以它会保留.reg最后的,而不是保存为.txt文件),然后您可以双击它运行并插入新应用程序的 EventLog 键。

于 2016-12-01T14:46:59.247 回答
3

如果您仍想以编程方式执行此操作,而不是通过注册表手动创建日志,那么有一种方法。您需要先检查是否EventSource存在,如果不存在,则需要创建它。在您尝试EventLog使用该源创建实例之前,这一切都必须发生。只需注意创建和使用之间的延迟,因此请务必处理此问题(有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/2awhba7a(v=vs.110).aspx)。

// Create the source, if it does not already exist. 
if(!EventLog.SourceExists("MySource"))
{
    //An event log source should not be created and immediately used. 
    //There is a latency time to enable the source, it should be created 
    //prior to executing the application that uses the source. 
    //Execute this sample a second time to use the new source.
    EventLog.CreateEventSource("MySource", "MyNewLog");
    Console.WriteLine("CreatedEventSource");
    Console.WriteLine("Exiting, execute the application a second time to use the source.");
    // The source is created.  Exit the application to allow it to be registered. 
    return;
}

// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.Source = "MySource";

// Write an informational entry to the event log.    
myLog.WriteEntry("Writing to event log.");
于 2014-07-07T19:59:30.307 回答