我想在.NET中制作必须在Windows Server 2003,2008上运行的Windows服务。我需要的主要功能是:
网络用户登录后,立即显示:
我不想在客户端计算机上安装或运行任何程序/脚本。
任何有关如何开发此项目的帮助将不胜感激。我看到一些文章使用System.Environment命名空间和其他一些文章解释了这一点,但它们只为本地登录用户提供了亮点。
答案 0 :(得分:3)
一种解决方法是监视Windows服务器计算机上的安全事件日志。
这假设Windows Server 2003/2008域控制器已设置为记录成功的“审核登录事件”。
using System.Diagnostics;
...
myLog = new EventLog("Security");
myLog.EntryWritten += new EntryWrittenEventHandler(OnEntryWritten);
...
/// <summary>
/// A new event is logged in the security event log.
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
private void OnEntryWritten(object source, EntryWrittenEventArgs e)
{
LogNewEntry(e.Entry);
}
Windows Server 2003
您可以识别事件ID为528和540的登录。
EventLogEntry实例包含属性UserName,其中包含Domain \ UserName。
EventLogEntry实例还包含属性ReplacementStrings。
要查找ip地址,您必须查看ReplacementStrings字符串数组属性[13]。
Windows Server 2008
您可以识别事件ID为4624的登录。
要查找UserName,您必须查看ReplacementStrings字符串数组属性[5]。
要查找域,您必须查看ReplacementStrings字符串数组属性[6]。
要查找ip地址,您必须查看ReplacementStrings字符串数组属性[18]。
答案 1 :(得分:0)
假设您可以使用.NET 3.5,请查看System.DirectoryServices.ActiveDirectory namespace。那里的课程应该为你提供一个良好的起点。