2009-09-27 20 views
12

स्थापित करते समय किसी को Windows इवेंट लॉग स्रोत मैन्युअल रूप से बनाने की आवश्यकता है, मैंने सी # में एक विंडोज सेवा विकसित की है। मैंने विजुअल स्टूडियो 2008 के साथ एक इंस्टॉलर बनाया है, जो विंडोज सेवा स्थापित करता है। सब कुछ अब तक अच्छा है। मैं यह सुनिश्चित करना चाहता हूं कि इंस्टॉलेशन स्रोत इंस्टॉल समय पर बनाया गया है, ताकि रनटाइम पर कोई भी त्रुटि/अपवाद स्थितियां विंडोज इवेंट लॉग में सही ढंग से लॉग हों।क्या Windows सेवा

क्या विंडोज सर्वर स्थापना (और अनइंस्टॉलेशन) के हिस्से के रूप में इवेंट स्रोत स्वचालित रूप से बनाया जाता है (और हटाया जाता है), या क्या मुझे इसे स्वयं संभालना है और इसे निम्न बनाने और हटाने के लिए एक कस्टम कार्रवाई करना है?

protected override void OnBeforeInstall(IDictionary savedState) 
{ 
    base.OnBeforeInstall(savedState); 

    if (!EventLog.SourceExists(ServiceName)) 
     EventLog.CreateEventSource(ServiceName, "Application"); 
} 

protected override void OnAfterUninstall(IDictionary savedState) 
{ 
    base.OnAfterInstall(savedState); 

    if (EventLog.SourceExists(ServiceName)) 
     EventLog.DeleteEventSource(ServiceName); 
} 

उत्तर

12

ऐसा लगता है कि ServiceInstaller स्वचालित रूप से सेवा के समान नाम के साथ इंस्टॉलेशन के दौरान डेटासोर्स बनाता है, इसलिए किसी भी अतिरिक्त कोड की आवश्यकता नहीं है।

ServiceInstaller प्रलेखन

जब स्थापना किया जाता है से, यह स्वचालित रूप से ServiceBase व्युत्पन्न वर्ग के साथ जुड़े ईवेंट लॉग स्रोत स्थापित करने के लिए एक EventLogInstaller पैदा करता है। इस स्रोत के लिए लॉग प्रॉपर्टी सर्विस इंस्टालर कन्स्ट्रक्टर द्वारा कंप्यूटर के एप्लिकेशन लॉग पर सेट की गई है। जब आप ServiceInstaller का सेवा नाम सेट करते हैं (जो सर्विसबेस के समान होना चाहिए .. :: सेवा का सेवा नाम), स्रोत स्वचालित रूप से एक ही मान पर सेट हो जाता है। स्थापना विफलता में, स्रोत की स्थापना पहले से स्थापित सेवाओं के साथ लुढ़का हुआ है।

8

आप उन्हें दौरान स्थापित रजिस्टर चाहिए, क्योंकि सेवा खाता विशेषाधिकार रनटाइम के दौरान ऐसा करने के लिए नहीं हो सकता: How to: Add Your Application as a Source of Event Log Entries:

डिफ़ॉल्ट रूप से, अगर आप पहले के बिना एक प्रविष्टि लिखने की कोशिश आपके घटक को वैध स्रोत के रूप में पंजीकृत कर रहा है, सिस्टम स्रोत प्रॉपर्टी के मान स्रोत स्ट्रिंग के रूप में स्रोत प्रॉपर्टी के मान का उपयोग करके स्रोत को स्वचालित रूप से पंजीकृत करता है। सामान्य रूप से, आपके एप्लिकेशन की स्थापना के दौरान नया ईवेंट स्रोत बनाएं। यह ऑपरेटिंग सिस्टम के लिए पंजीकृत ईवेंट स्रोतों और उनकी कॉन्फ़िगरेशन की अपनी सूची रीफ्रेश करने के लिए समय की अनुमति देता है। यदि ऑपरेटिंग सिस्टम ने इवेंट स्रोत की अपनी सूची को रीफ्रेश नहीं किया है और आप नए स्रोत के साथ एक ईवेंट लिखने का प्रयास करते हैं, तो लिखने का ऑपरेशन विफल हो जाएगा। यदि स्थापना के दौरान स्रोत बनाना कोई विकल्प नहीं है, तो पहले अपने लेखन प्रारंभिकरण के दौरान पहले लिखने के ऑपरेशन, से पहले अच्छी तरह से स्रोत बनाने का प्रयास करें। यदि आप यह दृष्टिकोण चुनते हैं, तो सुनिश्चित करें कि आपका प्रारंभिक कोड कंप्यूटर पर व्यवस्थापक अधिकारों के साथ चल रहा है। नई घटना सूत्रों

बनाने के लिए आवश्यक हैं ये अधिकार सौभाग्य से ServiceInstaller के रूप में आप पहले से ही पता चला, यह वास्तव में आसान बनाता है।

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