2010-11-17 106 views
4

我在C#中编写了一个简单的桌面应用程序,它在某人登录或关闭活动目录时在文本框中显示一行文本。它注定要在与AD相同的机器上运行,在下运行Windows Server 2008Windows Server 2003。到目前为止这么好,对于S2008每当触发(EventCode = 4624 OR EventCode = 4634)的事件时,我都设法触发ManagementEventWatcher如何监视Active Directory用户登录/注销?

这是我目前使用WMI查询:

SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance isa "Win32_NTLogEvent" AND (TargetInstance.EventCode = '4624' OR TargetInstance.EventCode = '4634') 

,然后我解析eventArgs.Properties["TargetInstance"].Properties["Message"]寻找客户端的用户和IP地址。

奇怪的是,即使用户注销,我仍然只获得EventCode 4624的一个事件。4634事件发生了什么?我如何捕获注销?

(我也在寻找一个变通的SU:How to get event info in application launched by Task Scheduler?

回答

1

的Windows Server 2008机开始只有几个小时的运行时间后表现这样。重新启动解决了问题。这只是一种预感,但它可能是由于尝试在S2008机器上启动我的应用程序太多次且错误太多而导致操作系统配置混乱的原因。

0

您可以使用系统注销并登录事件。系统中的每项活动都由Windows操作系统监控,并在事件日志中提供。

您可以使用.Net类来获取这些保存的事件。喜欢获取系统事件

EventLog log = new EventLog("System");