.net - Redirect stdout+stderr on a C# Windows service -
मैंने ServiceBase
सहायक का उपयोग करके सी # में विंडोज सर्विस लिखी है अपने निष्पादन के दौरान किसी बाहरी देशी DLL पर कुछ प्रक्रियाएं कहा जाता है। अनजाने में, उन प्रक्रियाएं stdout और / या stderr को एक अनियंत्रित तरीके से लिखते हैं क्योंकि इस DLL के लिए कोई स्रोत नहीं दिया जाता है।
क्या उन आउटपुट को सी # सेवा से एक लॉग फाइल में रीडायरेक्ट करना संभव है?
आप इसे PInvoke के द्वारा ऐसा करने के लिए कर सकते हैं:
[DllImport ("kernel32। Dll ", SetLastError = true)] सार्वजनिक स्थिर extern int SetStdHandle (int डिवाइस, IntPtr हैंडल); // अपनी सेवा में, शटडाउन पर निपटारा .. FileStream filestream; धारावाहिक स्ट्रीमर; शून्य पुनर्निर्देशन () {int स्थिति; IntPtr हैंडल; Filestream = नया फ़ाइलस्ट्रीम ("logfile.txt", FileMode.Create); स्ट्रीमराइटर = नया स्ट्रीमर (फिल्स्ट्रीम); Streamwriter.AutoFlush = true; Console.SetOut (StreamWriter); Console.SetError (StreamWriter); संभाल = filestream.Handle; स्थिति = सेटस्इंडहाण्डल (-11, हैंडल); // सेट stdout // स्थिति की स्थिति के रूप में स्थिति की जांच करें = SetStdHandle (-12, हैंडल); // सेट stderr // चेक स्थिति की आवश्यकता के रूप में}
Comments
Post a Comment