2009-10-30 15 views
25

से प्राप्त करना मैं पी/इनवॉक का उपयोग कर कुछ विंडोज फ़ंक्शंस के साथ गड़बड़ कर रहा हूं। कभी-कभी, मुझे एक त्रुटि कोड मिलता है जो ERROR_SUCCESS नहीं है (इस तरह का एक अजीब नाम)।विंडोज सिस्टम त्रुटि कोड शीर्षक/विवरण अपने हेक्स नंबर

क्या प्रोग्राम के भीतर इन्हें देखने का कोई तरीका है? Forexample, अगर मैं त्रुटि 1017. मिल रहा उपयोगकर्ता

बता सकते हैं सिस्टम को लोड करने या रजिस्ट्री में एक फ़ाइल को पुनर्स्थापित करने का प्रयास किया गया है, लेकिन निर्दिष्ट फ़ाइल एक रजिस्ट्री फ़ाइल स्वरूप में नहीं है। (ERROR_NOT_REGISTRY_FILE: 0x3F9)

के बजाय

त्रुटि कोड: 1017

उत्तर

76

मुझे यकीन है कि वहाँ एक niifty नेट आवरण अगर नहीं कर रहा हूँ, लेकिन आप FormatMessage एपीआई कह सकते हैं पी/Invoke का उपयोग कर।

this answer देखें कि इसे सामान्यतः मूल कोड से कैसे कहा जाएगा। हालांकि सवाल HRESULT से त्रुटि कोड को पकड़ने के लिए संदर्भित करता है, लेकिन उत्तर GetLastError/GetLastWin32Error से आने वाले नियमित ओएस त्रुटि कोड से पुनर्प्राप्ति कोड के लिए भी लागू होता है)।

संपादित करें:

using System.ComponentModel; 

string errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message; 
Console.WriteLine(errorMessage); 
+2

http: //www.pinvoke। नेट/default.aspx/kernel32/FormatMessage.html प्रारूप मैसेज – Malfist

+0

@ माल्फिस्ट का उपयोग कभी नहीं करता है, यह इंगित करने के लिए धन्यवाद। वहां एक उत्तर है जो कहता है कि जब तक आप त्रुटि कोड पुनर्प्राप्त करने के लिए मार्शल.GetLastWin32Error का उपयोग कर रहे हैं ठीक है। फिर भी, ऐसा लगता है कि Win32Exception एक बेहतर समाधान है। –

+2

नोट, हालांकि, इन दोनों समाधानों को केवल वर्णनात्मक त्रुटि संदेश मिलता है; इनमें से कोई भी आपको दस्तावेज में दिखाई देने वाले अंडरस्कोर के साथ पूंजीकृत त्रुटि नाम प्राप्त नहीं करेगा (जैसे ** ERROR_NOT_REGISTRY_FILE **)। यहां पर रहने वाले किसी भी व्यक्ति के लिए और इसके बारे में सोच रहा है, मैंने हाल ही में [एक प्रश्न विशेष रूप से उन त्रुटि नामों को प्रोग्रामेटिक रूप से निर्धारित करने के तरीके के बारे में पूछा] (http://stackoverflow.com/q/30203717/1248365), और उत्तर निकला कि आप नहीं कर सकते वे winerror.h से निरंतर नामों का संदर्भ लेते हैं, एक सी ++ में विंडोज एसडीके में प्रदान की गई फ़ाइल शामिल है। –

-2

हाँ वहाँ एक समारोह है कि करता है कि है, लेकिन मुझे याद नहीं कि यह क्या है: मुझे pinvoke.net की ओर इशारा करते के लिए धन्यवाद Malfist है, जो विकल्प भी शामिल है, एपीआई में कामयाब रहे। इस बीच, आप विजुअल स्टूडियो के भीतर से कोई विशेष कोड का अर्थ देखने के लिए त्रुटि लुकअप टूल (टूल्स-> त्रुटि लुकअप) का उपयोग कर सकते हैं।

+2

या निक ने जो किया वह बस करें :-) –

+1

मुझे यह नहीं दिखाई देता है। और यह मुझे उपयोगकर्ता को कुछ भी प्रदर्शित करने में मदद नहीं करता है। – Malfist

+1

यह ओपी के प्रश्न का उत्तर कैसे देता है? – SepehrM

0

मैं पी/Invoke के माध्यम से FormatMessage को कॉल करने के लिए प्रबंधित विकल्प की तलाश में इस पृष्ठ पर उतर गया।

जैसा कि अन्य ने कहा है, उन पूंजीकृत, अंडरस्कोर नामों को प्राप्त करने का कोई तरीका नहीं है, उन्हें Winerror.h में देखकर कम किया गया है, जिसे मैंने विभिन्न स्थानों पर ऑनलाइन पुन: पेश किया है जहां मैं जानकारी खोजने के दौरान उतर गया था विशिष्ट स्थिति कोड को हल करने के बारे में। Winerror.h के लिए एक त्वरित Google खोज, स्वयं, Rensselaer Polytechnic Instutute पर एक पृष्ठ खोला गया, जहां किसी ने # डिफाईन स्टेटमेंट्स को मदद से निकाला है।

इसे देखते हुए मुझे एक विचार दिया गया; मुझे लगता है कि विंडोज प्लेटफ़ॉर्म एसडीके के हिस्से के रूप में, जो माइक्रोसॉफ्ट विजुअल स्टूडियो के हर हाल के संस्करण के साथ जहाज है, के पास Winerror.h के स्रोत कोड से काम करने का एक तरीका हो सकता है।

अभी, मैं .NET असेंबली में एक दबाने वाली समस्या को हल करने के बीच में हूं जो मुझे इस पृष्ठ पर लाया। फिर, मैं देखूंगा कि मैं एक साथ क्या कर सकता हूं; इस तरह की चुनौती सही है मेरी गली, और किसी ने एक गौंटलेट फेंक दिया।

1

आप आतंक से परिभाषित कर सकते हैं।Rensselaer Polytechnic Institute पर ज, और उन्हें एक Enum में डाल दिया:

public enum Win32ErrorCode : long 
{ 
    ERROR_SUCCESS = 0L, 
    NO_ERROR = 0L, 
    ERROR_INVALID_FUNCTION = 1L, 
    ERROR_FILE_NOT_FOUND = 2L, 
    ERROR_PATH_NOT_FOUND = 3L, 
    ERROR_TOO_MANY_OPEN_FILES = 4L, 
    ERROR_ACCESS_DENIED = 5L, 
    etc. 
} 

तब यदि आपके त्रुटि कोड एक चर error_code त्रुटि में है आप का प्रयोग करेंगे:

Enum.GetName(typeof(Win32ErrorCode), error_code); 
+2

http://www.pinvoke.net/default.aspx/Constants/WINERROR.html पर इन्हें रखने वाली एक कॉपी-पेस्ट क्लास है –

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