2010-01-27 5 views
8

मैं किसी कंप्यूटर में जब नींद मोड में और बाहर जाता है, तो ट्रैक रखने के लिए मैनेजमेंटवेवेंट वाटर का उपयोग करने की कोशिश कर रहा हूं। मैं .NET और C# के लिए नया हूं इसलिए मैं इस काम को करने के लिए वाक्यविन्यास के साथ आने के लिए काफी संघर्ष कर रहा हूं।निलंबन/फिर से शुरू करने का ट्रैक रखने के लिए प्रबंधन EventWatcher का उपयोग कैसे करता है?

मुझे blog post मिला है जो विवरण देता है कि उसने इस स्थिति का ट्रैक रखने के लिए प्रबंधनवेवेंट वाटर का उपयोग कैसे किया, लेकिन उसने अपना पूरा कोड पोस्ट नहीं किया। मैं एक सरल सेवा बनाने की कोशिश कर रहा हूं जो एक .txt लॉग फ़ाइल बनाता है जिसमें कहा गया है कि कंप्यूटर को निलंबित कर दिया गया है/फिर से शुरू किया गया है लेकिन नामस्थानों और प्रकारों के साथ समस्याएं चल रहा हूं।

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.Linq; 
using System.ServiceProcess; 
using System.Text; 
using System.Management; 

namespace SleepNotifierService 
{ 
    public class WqlEventQuery : EventQuery { } 

    public partial class Service1 : ServiceBase 
    { 
     public Service1() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnStart(string[] args) 
     { 


      WqlEventQuery query = new WqlEventQuery("Win32_PowerManagementEvent"); 
      _watcher = new ManagementEventWatcher(query); 
      _watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived); 
      _watcher.Start(); 
     } 

     protected override void OnStop() 
     { 
      _watcher.Stop(); 
     } 

     void watcher_EventArrived(object sender, EventArrivedEventArgs e) 
     { 
      try 
      { 
       int eventType = Convert.ToInt32(e.NewEvent.Properties["EventType"].Value); 
       switch (eventType) 
       { 
        case 4: 
         Sleep(); 
         break; 
        case 7: 
         Resume(); 
         break; 
       } 
      } 
      catch (Exception ex) 
      { 
       //Log(ex.Message); 
      } 
     } 

     public void Sleep() 
     { 
     } 

     public void Resume() 
     { 
     } 

    } 
} 

फिर, यह पहली बार है कि मैं के साथ नेट और सी # प्रोग्रामिंग कर रहा हूँ तो मैं मेरी अज्ञानता के लिए क्षमा चाहते है:

यहाँ service.cs फाइल करने के लिए कोड है।

मैं जैसे नाम स्थान त्रुटियों हो रही है:

प्रकार या नाम स्थान नाम 'ManagementEventWatcher' नहीं किया जा सका पाया (आप एक का उपयोग कर निर्देश या एक विधानसभा संदर्भ याद कर रहे हैं?)

धन्यवाद,

टोमेक

उत्तर

6

आपको सिस्टम की आवश्यकता है। प्रबंधन नामस्थान, जो आपके द्वारा प्रदान किए गए कोड नमूने में शामिल है। मुझे विश्वास है कि आपको सिस्टम की संदर्भित करने की आवश्यकता है। अपनी परियोजना सेटिंग्स में प्रबंधन लाइब्रेरी। ऐसा करने के लिए निम्न चरणों का पालन करें (मुझे लगता है कि आप विजुअल स्टूडियो पर मुकदमा कर रहे हैं):

समाधान एक्सप्लोरर पर जाएं, और अपनी प्रोजेक्ट का विस्तार करें, संदर्भ फ़ोल्डर/विकल्प पर राइट क्लिक करें और संदर्भ मेनू से संदर्भ जोड़ें का चयन करें। अब .Net टैब का चयन करें और सिस्टम का चयन करें। सूची से प्रबंधन और ठीक क्लिक करें।

+0

सलाह के लिए धन्यवाद, अब मुझे एक त्रुटि मिल रही है कि WqlEventQuery "में कोई कन्स्ट्रक्टर नहीं है जो '1' तर्क लेता है"। मैं कुछ समाधान के लिए ऑनलाइन खोज कर रहा हूं और ऐसा लगता है कि लोग एक तर्क पारित करके WqlEventQuery का उपयोग कर रहे हैं। मुझे कुछ और शोध करना होगा। – Tomek

+0

आपको कोड की निम्न पंक्ति के कारण शायद यह त्रुटि मिल रही है: सार्वजनिक वर्ग WqlEventQuery: EventQuery {} वह पंक्ति मूल रूप से WqlEventQuery क्लास को फिर से परिभाषित करती है। और चूंकि आपके पास इस वर्ग के लिए परिभाषित कोई रचनाकार नहीं है, इसलिए डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग किया जाएगा। – user258808

संबंधित मुद्दे