2012-01-09 15 views
23

मैं वर्तमान में विंडोज सेवा बनाने के लिए कंसोल एप्लिकेशन के साथ टॉपशेल्फ़ का उपयोग कर रहा हूं। जब मैं कंसोल एप्लिकेशन के रूप में कोड चलाता हूं तो मैं आउटपुट परिणामों के लिए कुछ कंसोल। राइटलाइन() का उपयोग करता हूं। एक बार जब कोड करना होता है तो मैं कंसोल एप्लिकेशन को विंडोज सेवा के रूप में स्थापित करता हूं।कंसोल। राइटलाइन() एक विंडोज सेवा के अंदर?

क्या कंसोल छोड़ने के साथ कोई डाउनसाइड्स है। राइटलाइन() कोड हालांकि विंडोज सेवा कंसोल पर नहीं लिख सकती है? अगर मैं वहां कंसोल। राइटलाइन() छोड़ देता हूं तो अस्थिर कोड रखने का कोई जोखिम है?

+4

हालांकि (जैसा कि @ डीटेक और @ ओडी ने इंगित किया है), इससे कोई नुकसान नहीं होता है, मेरा सुझाव है कि आप log4net या NLog – yas4891

उत्तर

30

The output will simply be discarded

विंडोज सेवा में कोई कंसोल नहीं है तो कंसोल। राइट * आउटपुट त्याग दिया गया है।

  1. System.Diagnostics.Trace वर्ग कंसोल वर्ग के लिए एक ऐसी ही इंटरफ़ेस है ताकि आप यह करने के लिए काफी आसानी से अपने कोड की ओर पलायन कर सकते हैं: विकल्प की एक संख्या हैं।
  2. इसे तब फ़ाइल में आउटपुट करने के लिए कॉन्फ़िगर किया जा सकता है। आप इवेंट लॉग पर लिखने के लिए सिस्टम.डिग्नोस्टिक्स.इवेंटलॉग क्लास का उपयोग कर सकते हैं, जिसे आप इवेंट व्यूअर का उपयोग करके मॉनीटर कर सकते हैं।
  3. आप तृतीय-पक्ष ओपन-सोर्स लॉग 4नेट लाइब्रेरी का उपयोग कर सकते हैं जो बहुत लचीला है।
7

नहीं है, कंसोल वर्ग सुरक्षित रूप से STDOUT करने के बारे में होगा, लेकिन आप सिर्फ उत्पादन नहीं देख सकेंगे।

+1

stdout जैसे लॉगिंग फ्रेमवर्क में एक नज़र डालें, मुझे लगता है कि चिंता कहां है – Patrick

2

यदि आप System.Diagnostics.Trace कार्यक्षमता का उपयोग करते हैं, तो आप श्रोताओं और स्विच का उपयोग करके आउटपुट को रीडायरेक्ट कर सकते हैं। यदि आप TRACE प्रतीक के साथ संकलित करते हैं, तो कोड शामिल किया जाएगा। यदि आप ट्रेस नहीं जोड़ते हैं, तो इसे प्रोजेक्ट में संकलित नहीं किया जाएगा।

यदि आप अपनी सेवाओं को डिबगिंग के लिए कंसोल के रूप में चलाते हैं, तो ट्रेस डिफ़ॉल्ट रूप से कंसोल पर आउटपुट करेगा। मैंने डीबग या कंसोल लिखने के बजाय ट्रेस का उपयोग करने के लिए लिया है क्योंकि मैं कॉन्फ़िगरेशन फ़ाइल से, फ़ाइलों, स्क्रीन, डेटाबेस इत्यादि के किसी भी संयोजन में ट्रेस जानकारी आउटपुट कर सकता हूं

+0

ट्रेस आउटपुट को डीबगर कंसोल से आता है, कंसोल विंडो नहीं, जैसे 'कंसोल। राइटलाइन करता है'। मुझे लगता है कि इस बारे में कुछ भ्रम है कि ओपी किस कंसोल के बारे में बात कर रहा है। – ProfK

+0

ट्रेस को कंसोल ट्रेस लिस्टनर के माध्यम से कंसोल के आउटपुट सहित आउटपुट के कई रूपों के लिए कॉन्फ़िगर किया जा सकता है। ट्रेस और डीबग के लिए डिफ़ॉल्ट श्रोता डिफॉल्टट्रेस लिस्टनर है, जो डीबग कंसोल पर आउटपुट करता है। –

2

आउटपुट हमेशा विंडोज सर्वर तक छोड़ दिया गया था 2008R2। उस ओएस पर स्थापित एक सेवा में एक console.writeline() छोड़ें, और आपको लेखन रेखा() की स्थिति के आधार पर सेवा शुरू करने/चलाने पर 1067 त्रुटि मिलेगी।

+1

क्या आप "स्थिति के आधार पर ..." के साथ अपना क्या मतलब प्राप्त कर सकते हैं? मैं बस इस समस्या में भाग गया और कंसोल-स्टेटमेंट को हटाकर इसे ठीक कर दिया, लेकिन मैं वास्तव में परेशान हूं कि मैंने इसे पहले क्यों नहीं देखा है, क्योंकि मैंने पिछले कुछ वर्षों में कई विंडोज सेवाएं बनाई हैं। मैंने विंडोज 2008 आर 2 एसवीआर के साथ-साथ विंडोज 7 एंटरप्राइज़ पर समस्या की पुष्टि की है। –

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