Sådan registreres Windows Logon-begivenhed ved hjælp af OnSessionChange i C #

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg kan ikke registrere denne Logon-begivenhed i Windows.


Her er min kode:


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();
        }
    }
} 


Hvordan tester jeg at køre denne app og derefter fjernbetjening til min bærbare computer? Jeg kan se begivenheden genereret i Windows EventViewer, men min OnSessionChange hedder aldrig (jeg tilføjede et breakpoint indeni).


Er min kode forkert, eller er den måde, jeg tester forkert på?

Bedste reference


Normalt er flere samtidige eksterne desktop-sessioner ikke tilladt på nogen af ​​Windows-computersystemer. Så for at bruge RDP til at logge ind som en anden bruger, antager jeg, at du har hacket dette eller bruger Windows server (som regner ud XP!).


Uanset at hver bruger, der er logget ind i systemet, vil derfor have deres egne applikationer kørende, og hvert sæt applikationer er unikke for den bruger. Så App1 kunne køres uafhængigt af hver bruger.


Det betyder, at din konsolprogram ikke kan registrere den anden bruger, der er logget på.


For at gøre dette skal du bruge en Windows-service. Dette kører i baggrunden og kan registrere og arbejde for flere brugere og også registrere login og logout. Se dette SO link


Dette er formålet med at arve MyService fra ServiceBase. Hvis du ikke kører programmet som en tjeneste, kører du det ikke korrekt!


Du skal først installere din applikation som en tjeneste og derefter køre den som en tjeneste. [6]


Du siger, at du ikke tror, ​​at din ansøgning kan køre som en tjeneste. Jeg er ikke sikker på hvorfor, men hvis det er tilfældet, så skal du i stedet se på at skabe en form for script til at køre din ansøgning ved opstart/Log på.


På denne måde, hver gang en logger ind, vil din ansøgning køre. Det kan alligevel være enklere for dig.