我无法在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 :(得分:1)
通常,任何Windows桌面系统都不允许多个并发远程桌面会话。因此,为了使用RDP作为不同的用户登录,我假设您已经入侵了这个,或者正在使用Windows服务器(它排除了XP!)。
无论如何,登录系统的每个用户都将运行自己的应用程序,并且每组应用程序对该用户都是唯一的。所以App1可以由每个用户独立运行。
这意味着您的控制台应用程序无法检测到已登录的其他用户。
为此,您必须使用Windows服务。它在后台运行,可以检测并为多个用户工作,还可以检测登录和注销。见this SO link
这是从MyService
继承ServiceBase
的目的。如果您没有将该应用程序作为服务运行,那么您没有正确运行它!
您需要先install your application as a service然后像服务一样运行它。
您说您不认为您的应用程序可以作为服务运行。我不确定原因,但如果是这种情况,那么你必须考虑创建某种脚本来在启动/登录时运行你的应用程序。
这样,每次有人登录时,您的应用程序都会运行。无论如何,这对你来说可能更简单。