如何使用C#中的OnSessionChange来检测Windows登录事件。

7 浏览
0 Comments

如何使用C#中的OnSessionChange来检测Windows登录事件。

我无法在Windows中检测到此登录事件。

这是我的代码:

namespace ConsoleApplication2
{
    public class MyService: ServiceBase
    {
        public MyService()
        {
            CanPauseAndContinue = true;
            CanHandleSessionChangeEvent = true;
        }
        protected override void OnSessionChange(SessionChangeDescription changeDescription)
        {
            base.OnSessionChange(changeDescription);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyService tpl = new MyService();
            Thread t = new Thread(delegate()
            {
                while (true) { }
            });
            t.Start();
        }
    }
} 

我该如何测试运行此应用程序,然后远程桌面连接到我的笔记本电脑?我可以在Windows EventViewer中看到生成的事件,但是我的OnSessionChange从未被调用过(我在其中加了一个断点)。

我的代码有问题还是我的测试方式有问题?

0
0 Comments

问题的原因是,普通的控制台应用程序无法检测到其他用户登录的事件,因为每个用户登录系统后会有自己的应用程序运行,而控制台应用程序只能检测到当前用户的应用程序。

解决方法是使用Windows服务来实现检测多个用户登录和登录注销事件。Windows服务在后台运行,并且可以为多个用户工作,也可以检测到登录和注销事件。通过继承ServiceBase类来创建一个自定义的服务类(例如MyService),然后将应用程序安装为服务并运行,就可以实现这个功能。

如果你不想将应用程序作为服务运行,也可以考虑创建一个脚本,使其在启动或登录时运行应用程序。这样,每当有用户登录时,应用程序都会运行。这可能对你来说更简单一些。

总结一下,要检测Windows登录事件,需要将应用程序作为Windows服务运行,或者通过脚本在启动或登录时运行应用程序。这样就可以实现对多个用户登录和登录注销事件的检测。

0