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

C# 如何在C中使用OnSessionChange检测Windows登录事件#,c#,windows,C#,Windows,我无法在Windows中检测到此登录事件 这是我的密码: namespace ConsoleApplication2 { public class MyService: ServiceBase { public MyService() { CanPauseAndContinue = true; CanHandleSessionChangeEvent = true; }

我无法在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服务。它在后台运行,可以检测多个用户,也可以检测登录和注销。看

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

您需要先运行它,然后像运行服务一样运行它

您说您认为您的应用程序不能作为服务运行。我不知道为什么,但如果是这样的话,那么您必须考虑创建某种脚本,以便在启动/登录时运行应用程序


这样,每当有人登录时,您的应用程序就会运行。这对你来说可能更简单

一个建议是,不要在你的笔记本电脑中对其进行编码,而是将其添加为登录响应,作为计划任务的一部分(如果你有windows 10,这是一个sinch)…你将其添加到登录时运行,它确实做到了。。你不必检测它,我正在Windows7上测试它,但它也需要在XP上运行,所以我需要使用code.boo来检测它。。隐马尔可夫模型。。好计划。一开始就开枪。。如果事件日志对您不起作用,您可以监视它。。您的应用程序是否作为服务运行?不,它不是作为服务运行。而且我认为我不能把它作为一项服务来运行。哦。。这可能就是为什么它会出点问题的原因。。因为servicebase是用于服务的。。