windows - RegSvr32 निकास कोड प्रलेखन?




winapi dll (2)

मैंने एक COM सर्वर पंजीकृत करने के लिए RegSvr32.exe साथ खेला और अगले निकास कोड प्राप्त किए:

0 - ठीक से सामान्य डीएलएल कॉम सर्वर पंजीकरण करते समय

3 - नकली डीएलएल कॉम सर्वर पंजीकृत करने का प्रयास करते समय (सरल टेक्स्ट फ़ाइल का नाम बदलकर डीएलएल किया गया

4 - सरल डीएलएल पंजीकृत करने का प्रयास करें, कॉम सर्वर नहीं

प्रश्न: जहां मैं सभी संभावित निकास कोड और उनके अर्थ के आधिकारिक (या गैर-आधिकारिक लेकिन अच्छे) विवरण प्राप्त कर सकता हूं?

इंटरनेट पर खोज ने मुझे परिणाम नहीं दिया, इसलिए मुझे यह विषय मिला जहां लिखा गया है कि बाहर निकलने वाले कोड विंडोज सिस्टम त्रुटि कोड के साथ समान हैं, लेकिन मुझे समझ में नहीं आया कि क्यों खराब फाइल को पंजीकृत करने का प्रयास करें, मैं कोड = 3 प्राप्त कर रहा हूं = ERROR_PATH_NOT_FOUND , और गैर-COM DLL - 4 = ERROR_TOO_MANY_OPEN_FILES पंजीकृत करते समय? मेरे लिए यह तार्किक रूप से ध्वनि नहीं है।


निकास कोड दस्तावेज नहीं हैं। दस्तावेज यहां है:

हालांकि, संस्करण REGSVR32.EXE के लिए स्रोत कोड विजुअल स्टूडियो 2008 के साथ भेज दिया गया है। यह इसका संस्करण 4.0.0 के रूप में देता है, इसलिए विंडोज़ के साथ भेजे गए एक जैसा नहीं है, जो संस्करण 6 की रिपोर्ट करता है।

एक त्वरित रूप से ये दिखाता है:

#define FAIL_ARGS   1 // Invalid Argument
#define FAIL_OLE    2 // OleInitialize Failed
#define FAIL_LOAD   3 // LoadLibrary Failed
#define FAIL_ENTRY  4 // GetProcAddress failed
#define FAIL_REG    5 // DllRegisterServer or DllUnregisterServer failed.

स्रोत कोड को पढ़ना बताता है कि किसी भी परिस्थिति में यह उपरोक्त लोगों की तुलना में किसी अन्य कोड को वापस नहीं करता है और सफलता के लिए शून्य होता है, जो साबित करता है कि यह विंडोज़ जैसा नहीं है।

मुझे संदेह है कि रिटर्न कोड में अंतर यह है कि अगर यह GetProcAddress तक पहुंच जाता है, तो यह हमेशा 5 लौटने की बजाय, उस कॉल से निकास कोड लौटाता है।

आदर्श रूप से वे इसे अधिक उपयोगी निकास कोड प्राप्त करने के लिए GetLastError का उपयोग करते थे, लेकिन मुझे संदेह है कि बहुत सारे टूल (जैसे तृतीय पक्ष इंस्टॉल प्रोग्राम) हैं जो अब बाहर निकलने वाले कोड 2-4 पर निर्भर करते हैं, और इसे बदलने में बहुत देर हो चुकी है।


बेन का जवाब सही है, हालांकि, ध्यान दें कि परिणामस्वरूप त्रुटि कोड 3 भी दिया जाता है

  • डीएलएल नहीं मिला
  • डीएलएल को दूसरी प्रक्रिया से बंद कर दिया गया था और इसे पढ़ा नहीं जा सका
  • इस प्रक्रिया में फ़ाइल खोलने के अपर्याप्त अधिकार थे। उदाहरण के लिए, जब आवश्यक हो तो व्यवस्थापक अधिकारों के साथ नहीं चल रहा है (सी ड्राइव पर विशिष्ट फाइलें या सामान्य फाइलों के साथ)

> #define FAIL_LOAD 3 // LoadLibrary Failed

थोड़ा अस्पष्ट महसूस करता है, लेकिन लोड लाइब्रेरी डीएलएल के रूप में विशिष्ट डीएलएल के भीतर संदर्भित है। Depends जैसे किसी एप्लिकेशन का उपयोग करके, आप लापता लोगों सहित सभी संदर्भ पा सकते हैं। ध्यान दें कि एक लापता संदर्भ हमेशा त्रुटि कोड 3 का परिणाम नहीं देता है (ऐसे मामलों में जहां डीएलएल वास्तव में इसका उपयोग नहीं करता था)





regsvr32