2015-11-18 7 views
5

हम एक विंडोज डेस्कटॉप एप्लिकेशन प्रकाशित करते हैं (v120_xp प्लेटफ़ॉर्म टूलसेट के साथ विजुअल सी ++ 2013 के साथ बनाया गया) जो ठीक काम करता हैविंडोज 10 "थ्रेसहोल्ड 2" अपडेट (1511, 15086 बिल्ड) के बाद STATUS_DLL_INIT_FAILED (0xc0000142) के साथ शुरू करने में असफल ऐप की समस्या निवारण कैसे करें

आवेदन सही ढंग से शुरू करने में असमर्थ था: विंडोज 10 पर है, लेकिन हम उपयोगकर्ताओं को, जो "थ्रेसहोल्ड 2" अद्यतन है कि हमारे एप्लिकेशन अब शुरू करने के लिए विफल रहता है स्थापित किया है, निम्न त्रुटि संदेश प्रदर्शित होने से रिपोर्ट प्राप्त करने शुरू कर दिया है (0xc0000142)। एप्लिकेशन को बंद करने के लिए ठीक क्लिक करें।

त्रुटि कोड STATUS_DLL_INIT_FAILED है, इसलिए हम संभावित रूप से प्रारंभ करने में विफल होने वाले डीएलएल की तलाश में हैं।

हमने डीबगर में शुरू होने वाले एप्लिकेशन को देखकर और प्रक्रिया मॉनीटर का उपयोग करके यह देखने के लिए कुछ प्रयास किए हैं कि कौन से डीएलएल लोड किए जा रहे हैं। अंतिम डीएलएल लोड (थ्रेसहोल्ड 2 स्थापित मशीन पर) "davhlpr.dll" है। जब हम बिना किसी थ्रेसहोल्ड 2 के विंडोज 10 पर अपना एप्लिकेशन शुरू करते हैं, तो यह स्पष्ट रूप से उस डीएलएल को लोड किए बिना शुरू होता है। यह सुझाव देता है कि समस्या davhlpr.dll के साथ कुछ करने के लिए हो सकती है, लेकिन हमारा कोड स्पष्ट रूप से उस डीएलएल पर निर्भर नहीं है और मुझे नहीं पता कि यह क्या है।

क्या किसी और ने ऐसा कुछ देखा है?

क्या किसी के पास कोई विचार है कि हम इसका निवारण कैसे कर सकते हैं? डीबगर और प्रोसेस मॉनिटर की कोशिश करने के बाद, मैं विचारों से बाहर हूं।

+2

davhlpr.dll का उपयोग WebDAV (https://msdn.microsoft.com/en-us/library/windows/desktop/dd408159.aspx) के लिए किया जाता है। डीबगर में कॉल स्टैक कुछ सुराग प्रदान कर सकता है कि इसे लोड करने के लिए क्या चल रहा है। – dxiv

उत्तर

4

हम अंततः इसके नीचे पहुंच गए।

  1. लिंकर को बताएँ देरी लोड करने के लिए सभी DLLs कि हमारे आवेदन (जब तक के बाद आवेदन शुरू कर दिया था किसी भी प्रारंभ समस्याओं टाल) पर निर्भर करता है: दृष्टिकोण हम ले लिया इस प्रकार थी।
  2. एप्लिकेशन को तब तक व्यायाम करें जब तक यह टूट न जाए, जो तब हुआ जब comdlg32.dll को "ओपन" संवाद प्रदर्शित करने के लिए लोड किया गया था।
  3. एक साधारण परीक्षण प्रोग्राम बनाएं जो केवल "ओपन" संवाद दिखाने के लिए comdlg32.dll का उपयोग करता है।
  4. विंडोज 10 बिल्ड 15086 पर टेस्ट प्रोग्राम चलाएं और देखें कि यह कौन सी डीएलएल लोड करता है, जो डीएलएल के साथ तुलना करता है जो हमारे ऐप के विलंब-लोड संस्करण में "ओपन" संवाद को ट्रिगर करते समय लोड किया जाता है।

लंबी कहानी कम: यह पता चला है कि विफलता एक Windows घटक "fwbase.dll" कहा जाता है की वजह से था (Windows फ़ायरवॉल का हिस्सा है, जाहिरा तौर पर), जो comdlg32.dll किसी कारण से लोड करने का प्रयास किया गया था। हमारे एप्लिकेशन में "fwBase.dll" नामक एक घटक शामिल था (एएमडी फ्रेमवेव लाइब्रेरी का हिस्सा), और विंडोज लोडर संभवतः fwbase.dll लोड करने की कोशिश करने से परेशान नहीं था क्योंकि यह सोचा था कि यह पहले ही लोड हो चुका है। उसके बाद जल्द ही आपदा का पालन किया।

इस बिंदु पर, मुझे यकीन नहीं है कि यह विंडोज़ में क्या है या क्या है, लेकिन हमने इसे fwBase.dll का नाम बदलकर हल किया है।

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