2009-10-06 10 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); 
    } 
} 

Utworzyłem usługę Windows. Kiedy ponownie uruchomię system i zaloguję się, wyloguję, zablokuję lub odblokuję sesję. nie uchwyci wydarzenia. Usługa działa, ale nie będzie działać poprawnie.Jak niezawodnie przechwytywać logowanie systemu Windows, wylogowanie, zablokowanie i odblokowanie zdarzeń z usługi?

Po ponownym uruchomieniu usługi będzie rejestrować wszystkie zdarzenia zgodnie z oczekiwaniami. Jak mogę rozwiązać problem/naprawić to?

+0

A co próbujesz nam z tym powiedzieć ... Proszę określić "to nie zadziała" trochę bardziej szczegółowo ... jak to nie działa? Co to robi? Co to może zrobić? –

+0

W jakich wersjach systemu Windows próbujesz kierować reklamy? Zdarzenia zachowywały się inaczej między 2000, XP i Vista –

Odpowiedz

6

Uczyń swoją usługę zależną od TermService (usługa Terminal Services). Pod pokrywami klasa SystemEvents jest oparta na funkcji WTSRegisterSessionNotification Win32, która is documented zawodzi, jeśli usługa Terminal Services nie uruchomiła się przed wywołaniem. Dodając do usługi zależność od TermService, tak się nie stanie. Można również połączyć się z globalnym zdarzeniem Global \ TermSrvReadyEvent przy użyciu techniki, takiej jak this i czekać na zarejestrowanie programu obsługi SystemEvent do momentu uruchomienia zdarzenia "gotowego" TS.

0

spróbuj zostawić zarejestrowane zdarzenie, zamiast go usunąć po przeczytaniu Rejestrujesz się, aby słuchać, a następnie natychmiast wyrejestrować, co nie ma sensu.

Powiązane problemy