[英]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.