繁体   English   中英

如何在C#中使用OnSessionChange检测Windows登录事件

[英]How to detect Windows Logon event using OnSessionChange in C#

我无法在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桌面系统上都不允许多个并发的远程桌面会话。 因此,要使用RDP以其他用户身份登录,那么我假设您已经对此进行了入侵,或者正在使用Windows Server(排除XP!)。

无论如何,每个登录到系统的用户都将运行自己的应用程序,并且每组应用程序对该用户都是唯一的。 因此,App1可以由每个用户独立运行。

这意味着您的控制台应用程序无法检测到其他登录用户。

为此,您必须使用Windows服务。 它在后台运行,可以检测多个用户并为之工作,还可以检测登录和注销。 看到这个SO链接

这是从ServiceBase继承MyService的目的。 如果您没有将应用程序作为服务运行,则说明它运行不正确!

您需要先将应用程序作为服务安装 ,然后像服务一样运行。

您说您不认为您的应用程序可以作为服务运行。 我不确定为什么,但是如果是这种情况,那么您将不得不考虑创建某种脚本来在启动/登录时运行您的应用程序。

这样,每次有人登录,您的应用程序就会运行。 无论如何,这可能对您来说更简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM