2009-10-06 13 views
5
using Microsoft.Win32; 

public class App 
{ 
    static void Main() 
    { 
    SystemEvents.SessionSwitch += SystemEvents_SessionSwitch; 
    Console.ReadLine(); 
    SystemEvents.SessionSwitch -= SystemEvents_SessionSwitch; 
    } 

    static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) 
    { 
    if(e.Reason == SessionSwitchReason.SessionLock) 
    { 
    Console.WriteLine("locked at {0}", DateTime.Now); 
    } 
    if(e.Reason == SessionSwitchReason.SessionUnlock) 
    { 
    Console.WriteLine("unlocked at {0}", DateTime.Now); 
    } 
} 

Ho creato un servizio di Windows. Quando riavvio il sistema e accesso, disconnessione, blocco o sblocco della sessione. non catturerà l'evento. Il servizio è in esecuzione, ma non funzionerà correttamente.Come acquisire in modo affidabile l'accesso a Windows, disconnettersi, bloccare e sbloccare eventi da un servizio?

Quando si riavvia il servizio, acquisirà tutti gli eventi come previsto. Come faccio a risolvere/risolvere questo problema?

+0

E cosa stai cercando di dirci con questo ... Si prega di specificare "non funzionerà" un po 'più dettagliato ... come funziona? Che cosa fa? Cosa potrebbe fare? –

+0

Quali versioni di Windows stai specificatamente cercando di indirizzare? Gli eventi si sono comportati in modo diverso tra 2000, XP e Vista –

risposta

6

Rendere il servizio dipendente da TermService (il servizio Servizi terminal). Sotto le copertine, la classe SystemEvents è basata sulla funzione Win32 di WTSRegisterSessionNotification, che non ha effetto is documented se il servizio Servizi terminal non è stato avviato dal momento in cui viene chiamato. Aggiungendo la dipendenza da TermService al servizio, ciò non accadrà. È inoltre possibile connettersi all'evento globale Global \ TermSrvReadyEvent utilizzando una tecnica come this e attendere la registrazione del gestore SystemEvent fino all'avvio dell'evento TS "pronto".

0

provare a lasciare l'evento registrato anziché rimuoverlo dopo la readline È in corso la registrazione per l'ascolto, quindi l'annullamento immediato della registrazione che non ha senso.

Problemi correlati