Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C语言以编程方式检测windows登录尝试#_C#_.net_Windows_Winforms - Fatal编程技术网

C# 使用C语言以编程方式检测windows登录尝试#

C# 使用C语言以编程方式检测windows登录尝试#,c#,.net,windows,winforms,C#,.net,Windows,Winforms,我想开发一个windows窗体应用程序来监视我的网络计算机登录、注销和登录尝试的详细信息,并根据检测结果执行一些操作。(例如,向管理员发送一些通知) 我所尝试的: 我读过有关windows服务、windows任务计划程序和使用任务计划程序进行事件审核的内容,但我想务实地进行。因此,我的问题是,如何使用C#?以编程方式检测windows登录尝试。要检测登录尝试,您可以依赖windows安全事件。您可以看到安全事件及其含义的列表。您可能感兴趣的有: 4624: An account was succ

我想开发一个windows窗体应用程序来监视我的网络计算机登录、注销和登录尝试的详细信息,并根据检测结果执行一些操作。(例如,向管理员发送一些通知)

我所尝试的:


我读过有关windows服务、windows任务计划程序和使用任务计划程序进行事件审核的内容,但我想务实地进行。因此,我的问题是,如何使用C#?

以编程方式检测windows登录尝试。要检测登录尝试,您可以依赖windows安全事件。您可以看到安全事件及其含义的列表。您可能感兴趣的有:

4624: An account was successfully logged on.
4625: An account failed to log on.
4648: A logon was attempted using explicit credentials.
4675: SIDs were filtered.
使用应用程序/服务检测事件

您可以通过使用类并处理其事件的代码自己检测登录尝试。下面的代码示例只是将事件记录在一个文件中,以显示可以通知您该事件并使用它。您可以通过电子邮件发送通知、运行应用程序或执行其他操作,而不是写入文件

要测试代码,您应该以管理员身份运行。此外,在真实环境中,您应该将其设置为服务,或者将其配置为在用户登录之前运行

private void Form1_Load(object sender, EventArgs e)
{
    EventLog logListener = new EventLog("Security");
    logListener.EntryWritten += logListener_EntryWritten;
    logListener.EnableRaisingEvents = true;
}
void logListener_EntryWritten(object sender, EntryWrittenEventArgs e)
{
    //4624: An account was successfully logged on.
    //4625: An account failed to log on.
    //4648: A logon was attempted using explicit credentials.
    //4675: SIDs were filtered.
    var events = new int[] { 4624, 4625, 4648, 4675 };
    if (events.Contains(e.Entry.EventID))
        System.IO.File.AppendAllLines(@"d:\log.txt", new string[] {
            string.Format("{0}:{1}",  e.Entry.EventID, e.Entry.Message)
        });
}
注意:正如您在问题中所说,您可以使用Windows计划任务在事件发生时执行某些操作


当检测到不成功的登录尝试时,您可以要求Windows为您做一些事情,例如运行应用程序(发送电子邮件或其他东西)。为此,,使用Windows任务计划程序,并说任务在特定事件发生时运行,并指定合适的事件源和Id。还要查看完整步骤的示例,请参阅。

为什么不使用事件查看器?@Byakko_Haku感谢您的答复。对审阅者来说:以编程方式检测Windows登录尝试的范围并不太广,可能是问题已被关闭,因为用户说他们希望向管理员发送通知的部分。但这只是一个例子,核心问题是检测登录尝试。谢谢你的回复。不客气。您可以简单地测试代码,并让我知道结果。只需编写一个简单的应用程序并以管理员身份运行,然后切换帐户并尝试登录到另一个帐户并输入一些错误的密码就足够了。然后转到主帐户,查看设置为保存的路径中的日志。很抱歉延迟回复…我收到有关此代码的警告,但我没有收到任何输出文件…有关“e.Entry.EventID”的警告和消息:“此属性已被弃用。请改为使用System.Diagnostics.EventLogEntry.InstanceId。”您应该以管理员身份运行,也可以暂时忽略警告,但最好使用消息中所述的相同属性。但我收到的事件只是使用我在上述评论中所说的场景。