2016-02-09 10 views
6

जब एक सी # नेट कंसोल एप्लिकेशन एक अनचाहे अपवाद के कारण समाप्त हो जाता है, तो क्या नियम निर्धारित करते हैं कि कौन से निकास कोड लौटाया गया है या 255 हमेशा उपयोग किया जाता है?निकास कोड जब अनचाहे अपवाद निष्पादन समाप्त करता है?

मैं इस पर दस्तावेज़ ढूंढने में सक्षम नहीं हूं। throw new Exception() निष्पादित करने वाला एक सरल कंसोल ऐप निकास कोड 255 के साथ मर जाता है। मुझे यह जानना है कि यह सुरक्षित है कि सभी अनचाहे अपवाद इस त्रुटि कोड को वापस कर देंगे या यदि भिन्नता/कोने के मामले हैं तो मुझे इसके बारे में पता होना चाहिए।

C:\Temp\> ThrowsExceptionConsoleApp.exe 
C:\Temp\> echo %errorlevel% 
255 
+3

[ईसीएमए -335] (http://www.ecma-international.org/publications/standards/Ecma-335.htm) में कुछ भी नहीं मिला, इसलिए मुझे लगता है कि रनटाइम का निकास कोड मानकीकृत नहीं है एक अनचाहे अपवाद के परिदृश्य के लिए। – Gene

+1

हम्म, मेरे लिए विंडोज 10.0.14393 पर, 'ईसीएचओ% ERRORLEVEL% 'आउटपुट' -532462766'। – binki

उत्तर

5

नहीं, हमेशा नहीं। 255 एक यूनिक्स नंबर है, जो आम तौर पर -1 से बाहर निकलकर उत्पादित होता है, अस्पष्ट है कि आपको इसे कैसे देखना है। विंडोज़ पर, एक .NET प्रक्रिया आमतौर पर एसईएच अपवाद कोड मान से बाहर निकलती है, जिसने प्रक्रिया को क्रैश और समाप्त करने की प्रक्रिया प्राप्त की है। एक प्रबंधित अपवाद के लिए आमतौर पर -532462766 (उर्फ 0xE0434352)। पिछले 3 हेक्स जोड़े "सीसीआर" शब्द का उच्चारण करते हैं, जिसका संक्षिप्त नाम समय के कोहरे में खो गया है, जिसे corexcep.h में EXCEPTION_COMPLUS के रूप में घोषित किया गया है। नमूना प्रश्न is here

एक अच्छी तरह से व्यवहार कार्यक्रम AppDomain.CurrentDomain.UnhandledException की सदस्यता लेता है और जब यह मार्शल.GetHRForException() द्वारा उत्पादित एक की तरह पर्यावरण.एक्सिट() को कॉल करता है तो बेहतर निकास कोड प्रदान करता है। आपको एक एक्जिट कोड मिलेगा जो प्रबंधित अपवाद प्रकार से मेल खाता है, मानक अपवाद प्रकारों के मान को CorError.h SDK फ़ाइल में दस्तावेज़ित किया गया है।


echo %errorlevel% 

यह पहले प्रश्न में है कि नहीं देखा। % errorlevel% में केवल 0 और 255 के बीच एक मान हो सकता है, जो एक प्रतिबंध है जो एमएस-डॉस दिनों में वापस जाता है। चूंकि एसईएच अपवाद कोड हमेशा बड़ा होगा, आप आमतौर पर हमेशा 255 देखेंगे।% Errorlevel% का उपयोग करने के लिए केवल सौहार्दपूर्ण तरीका यह मानना ​​है कि प्रोग्राम 0 में नहीं होने पर विफल रहा है। जब तक आपको प्रोग्राम लेखक से विशिष्ट दस्तावेज नहीं मिल जाता।

+2

ऐसा लगता है कि प्रतिबंध कुछ समय बाद उठाया गया था क्योंकि विंडोज 10.0.14393 में मुझे 'ECHO% ERRORLEVEL%' के लिए '-532462766' मिलता है। – binki

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