如何使用C#中的OnSessionChange来检测Windows登录事件。
如何使用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
从未被调用过(我在其中加了一个断点)。
我的代码有问题还是我的测试方式有问题?
问题的原因是,普通的控制台应用程序无法检测到其他用户登录的事件,因为每个用户登录系统后会有自己的应用程序运行,而控制台应用程序只能检测到当前用户的应用程序。
解决方法是使用Windows服务来实现检测多个用户登录和登录注销事件。Windows服务在后台运行,并且可以为多个用户工作,也可以检测到登录和注销事件。通过继承ServiceBase类来创建一个自定义的服务类(例如MyService),然后将应用程序安装为服务并运行,就可以实现这个功能。
如果你不想将应用程序作为服务运行,也可以考虑创建一个脚本,使其在启动或登录时运行应用程序。这样,每当有用户登录时,应用程序都会运行。这可能对你来说更简单一些。
总结一下,要检测Windows登录事件,需要将应用程序作为Windows服务运行,或者通过脚本在启动或登录时运行应用程序。这样就可以实现对多个用户登录和登录注销事件的检测。