2016-02-09 37 views
6

Bir C# .Net konsol uygulaması işlenmeyen bir özel durum nedeniyle sonlandırıldığında, hangi çıkış kodunun döndüğünü belirleyen kurallar var mı veya 255 her zaman kullanılıyor mu?İşlenmeyen Özel Durum Yürütüldüğünde Çıkış Kodu Yürütülüyor mu?

Bu sayfada belge bulamadım. Çıkış kodu 255 ile throw new Exception() kalıpları yürüten basit bir konsol uygulaması. Tüm işlenmeyen özel durumların aynı hata kodunu döndüreceğini veya farkında olmam gereken varyasyonlar/köşe durumları varsayalım güvenli olup olmadığını bilmek istiyorum.

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

[ECMA-335] 'de hiçbir şey bulamadık (http://www.ecma-international.org/publications/standards/Ecma-335.htm), bu nedenle çalışma zamanının çıkış kodları standartlaştırılmamış İşlenmeyen bir istisna senaryosu için. – Gene

+1

Hmm, benim için Windows 10.0.14393, 'ECHO% ERRORLEVEL%' çıktıları -532462766'. – binki

cevap

5

Hayır, her zaman değil. 255, normalde -1 ile çıkarak üretilen bir Unix numarasıdır, bunu nasıl göreceğinize dair net değil. Windows'da, bir .NET işlemi normal olarak SEH özel durum kodu değeriyle, işlemin çökmesine ve sonlandırılmasına sahip olandan çıkar. Yönetilen bir istisna için genellikle -532462766 (aka 0xE0434352). Son 3 onaltılık çift, "CCR", yani zamanın sisinde anlamını kaybeden bir kısaltmadır, corexcep.h dosyasında EXCEPTION_COMPLUS olarak bildirilir. Örnek soru is here.

İyi huylu bir program, AppDomain.CurrentDomain.UnhandledException abonesidir ve Marshal.GetHRForException() tarafından üretilen gibi, Environment.Exit() öğesini çağırdığında daha iyi bir çıkış kodu sağlar. Yönetilen özel durum türü ile eşleşen bir çıkış kodu alırsınız, standart istisna türleri için değerler CorError.h SDK dosyasında belgelenmiştir.


echo %errorlevel% 

Daha önce söz konusu olduğunu görmedik. % errorlevel% değeri sadece 0 ile 255 arasında bir değere, MS-Dos günlerine giden bir kısıtlamaya sahip olabilir. SEH istisna kodu her zaman daha büyük olacağından, normalde her zaman 255'i görürsünüz. Sadece% errorlevel% kullanmak için aklı başında, program 0 değilse, programın başarısız olduğunu varsaymaktır.

+2

Windows 10.0.14393'te 'ECHO% ERRORLEVEL% 'için' -532462766' aldığım için kısıtlamanın bir süre kaldırıldığını görüyoruz. – binki

İlgili konular