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

मैंने एक विंडोज सेवा बनाई है। जब मैं सिस्टम को पुनरारंभ करता हूं और लॉगिन करता हूं, सत्र बंद करता हूं, लॉक करता हूं या अनलॉक करता हूं। यह घटना पर कब्जा नहीं करेगा। सेवा चल रही है, लेकिन यह ठीक से काम नहीं करेगा।Windows लॉगऑन को विश्वसनीय रूप से कैप्चर करने, लॉगऑफ, लॉक और किसी सेवा से ईवेंट अनलॉक करने के लिए कैसे?

जब मैं सेवा को पुनरारंभ करता हूं तो यह सभी घटनाओं को अपेक्षित रूप से कैप्चर करेगा। मैं समस्या निवारण/इसे ठीक करने के बारे में कैसे जा सकता हूं?

+0

और आप हमें इसके साथ क्या बताने की कोशिश कर रहे हैं ... कृपया निर्दिष्ट करें कि यह काम नहीं करेगा "यह थोड़ा और काम नहीं करेगा ... यह कैसे काम नहीं करता है? यह क्या करता है? यह क्या करना चाहिए? –

+0

विंडोज के कौन से संस्करण आप विशेष रूप से लक्षित करने की कोशिश कर रहे हैं? घटनाएं 2000, एक्सपी और विस्टा के बीच अलग-अलग व्यवहार करती थीं –

उत्तर

6

अपनी सेवा टर्म सेवा (टर्मिनल सेवा सेवा) पर निर्भर करें। कवर के तहत, SystemEvents क्लास WTSRegisterSessionNotification Win32 फ़ंक्शन पर आधारित है, जो टर्मिनल सेवा सेवा को तब तक शुरू नहीं होने पर विफल होने पर is documented विफल हो जाती है। आपकी सेवा में टर्म सेवा पर निर्भरता जोड़कर, ऐसा नहीं होगा। आप this जैसी तकनीक का उपयोग करके ग्लोबल \ TermSrvReadyEvent ग्लोबल इवेंट से भी कनेक्ट कर सकते हैं और टीएस "तैयार" ईवेंट आग तक सिस्टमइवेंट हैंडलर को पंजीकृत करने का इंतजार कर सकते हैं।

0

रीडलाइन के बाद इसे हटाने के बजाय पंजीकृत ईवेंट को छोड़ने का प्रयास करें, आप तुरंत सुनने के लिए पंजीकरण कर रहे हैं, तुरंत अनियंत्रित करने के लिए जो कोई समझ नहीं आता है।