एप्लिकेशन सही तरीके से प्रारंभ नहीं हो सका (0xc000007b)


159

मेरे पास एक क्लाइंट / सर्वर ऐप है जिसे मैं एक पीसी पर विकसित कर रहा हूं। अब इसे दो सीरियल पोर्ट चाहिए, इसलिए मैंने एक दोस्त से पीसी उधार लिया।

जब मैं अपना ऐप बनाता हूं और इसे चलाने या डिबग करने की कोशिश करता हूं (चाहे डेल्फी आईडीई में या विंडोज फाइल मैनेजर से), यह "एप्लिकेशन सही ढंग से शुरू नहीं कर पाया (0xc000007b)"।

Googling बहुत ऊपर नहीं लाती है, लेकिन लगता है कि यह डेल्फी विशिष्ट नहीं है और अन्य ऐप्स के साथ होता है। यह 64 बिट ऐप से 32 बिट डीएलएल में कॉल करने या इसके विपरीत होने के कारण लगता है।

  • दोनों पीसी विंडोज 7, 64 बिट हैं
  • दोनों में डेल्फी एक्स 2 स्टार्टर संस्करण है जो केवल 32 बिट्स को संभाल सकता है
  • ऐप मेरे पीसी पर ठीक चलता है, लेकिन मेरे दोस्त पर नहीं
  • अन्य डेल्फी एप्लिकेशन दोनों पीसी पर ठीक चलते हैं

क्या कोई मुझे संकेत दे सकता है कि मैं इसे कैसे ट्रैक करूं?


6
साइड नोट पर, आप सिंगल पीसी पर वर्चुअल सीरियल पोर्ट स्थापित करने के लिए com0com का उपयोग कर सकते हैं । डिबगिंग और परीक्षण के लिए बहुत अच्छा है, बस 2 वर्चुअल पोर्ट बनाएं और उन्हें एक साथ कॉन्फ़िगर करें, फिर प्रत्येक पोर्ट पर अपने एप्लिकेशन चलाएं ताकि वे एक दूसरे से बात कर सकें।
रेमी लेबेउ

1
क्या आपने विंडोज ईवेंट लॉग की जांच की? कभी-कभी विंडोज अधिक जानकारी प्रदान करता है जिसके संबंध में DLL ने एप्लिकेशन को विफल कर दिया।
लुइस कैरास्को

1
यह एक लापता DLL मुझे संदेह होगा, आमतौर पर कुछ उपयोगिता, या यहां तक ​​कि मेमोरी मैनेजर भी।
mj2008

4
@ mj2008 गुम DLL एक अलग त्रुटि देता है: कार्यक्रम शुरू नहीं हो सकता क्योंकि XXXX.dll आपके कंप्यूटर से गायब है। इस समस्या को ठीक करने के लिए प्रोग्राम को पुन: स्थापित करने का प्रयास करें।
डेविड हेफर्नन

3
@ और यह त्रुटि है STATUS_INVALID_IMAGE_FORMAT। जब सिस्टम को उस नाम का DLL नहीं मिल सकता है तो आपको वह नहीं मिलता है। आपको STATUS_INVALID_IMAGE_FORMATतब मिलता है जब कोई DLL मिल सकता है, लेकिन यह भ्रष्ट है, या गलत बिटनेस है।
डेविड हेफर्नन

जवाबों:


133

शुरू करने के लिए, मैं यह परीक्षण करने का सुझाव दूंगा कि क्या निर्भरता वॉकर का उपयोग करने से आपके आवेदन और इसकी निर्भरता के बीच कोई समस्या है


31
Windows त्रुटि कोड ( google.de/… ) के आधार पर , यह त्रुटि कोड का अर्थ है: 0xC000007B STATUS_INVALID_IMAGE_FORMAT।
मोक्स

95
यह एक अच्छा संकेत है कि 32-बिट ऐप ने 64-बिट डीएलएल को लोड करने की कोशिश की।
रेमी लेबेउ

4
तथ्य की बात के रूप में, यह त्रुटि कोड Pdf फ़ाइल एक उत्कृष्ट स्रोत है।
मोक्स

4
+1 और एसेवर। धन्यवाद, निर्भरता वॉकर ने दिन बचाया। मैंने 32 बिट संस्करण के साथ 64 बिट डीएलएल को बदल दिया और यह अब काम करता है।
मावग का कहना है कि मोनिका

6
सुनिश्चित करें कि आपको निर्भरता वॉकर का सही संस्करण मिला है। X86 निर्भरता x64 बायनेरिज़ के लिए गलत परिणाम प्रदर्शित करेगा।
एंड्रियास हैफरबर्ग

53

एक लोड समय निर्भरता को हल नहीं किया जा सका। यह डिबग करने का सबसे आसान तरीका डिपेंडेंसी वॉकर का उपयोग करना है । लोड प्रक्रिया के डायग्नोस्टिक्स आउटपुट प्राप्त करने के लिए प्रोफ़ाइल विकल्प का उपयोग करें। यह विफलता के बिंदु की पहचान करेगा और आपको समाधान के लिए मार्गदर्शन करना चाहिए।

इस त्रुटि का सबसे आम कारण 64 बिट डीएलएल को 32 बिट प्रक्रिया में लोड करने की कोशिश कर रहा है, या इसके विपरीत।


2
+1। यह भी ध्यान दें कि आपको निर्भरता वॉकर के 32 बिट संस्करण को चलाना चाहिए, और सुनिश्चित करें कि सभी लोड किए गए डीएलएल 32 बिट हैं। यदि आप 64 बिट संस्करण निर्भरता वॉकर को चलाने की कोशिश करते हैं, तो यह खुशी से 64 बिट DLL को लोड करेगा, जैसे कि VCRedist, भले ही आपके 32 बिट संस्करण भी हों।
लियोर्डा

12

यह एक लापता dll है। संभवतः, आपके dll जो कॉम पोर्ट के साथ काम करते हैं उनमें एक अनसुलझा dll निर्भरता है। आप निर्भरता वॉकर और विंडोज़ डिबगर का उपयोग कर सकते हैं। उदाहरण के लिए mfc लाइब्रेरी की सभी जाँच करें। इसके अलावा, आप nrCommlib का उपयोग कर सकते हैं - यह कॉम पोर्ट के साथ काम करने के लिए शानदार घटक है।


12

मैंने यहां निर्दिष्ट सभी चीजों की कोशिश की और अभी तक एक और जवाब नहीं मिला। मुझे अपना आवेदन 32-बिट DLL के साथ संकलित करना पड़ा। मैंने 32-बिट और 64-बिट दोनों में पुस्तकालयों का निर्माण किया था लेकिन PATH64-बिट पुस्तकालयों के लिए मेरा सेट था । जब मैंने अपना आवेदन पुनः प्राप्त किया (अपने कोड में कई बदलावों के साथ) मुझे यह भयानक त्रुटि मिली और दो दिनों तक संघर्ष किया। अंत में, कई अन्य चीजों की कोशिश करने के बाद, मैंने PATH64-बिट DLL से पहले 32-बिट DLL को बदल दिया (उनके समान नाम हैं)। और इसने काम किया। मैं इसे पूर्णता के लिए यहाँ जोड़ रहा हूँ।


9

पहले के उत्तरों में यह उल्लेख किया गया है कि निर्भरता वॉकर का उपयोग करने का तरीका है, मेरे मामले में (मेरा आवेदन त्रुटि कोड के साथ विफल रहता है), निर्भरता वॉकर ने कुछ dll दिखाया जो प्रासंगिक नहीं हैं!

अंत में पता चला कि मैं "प्रोफ़ाइल" मेनू पर जाकर प्रोफाइलिंग चला सकता हूं और यह एप्लिकेशन को चलाएगा और सटीक dll पर रुक जाएगा जो समस्या का कारण है! मुझे पता चला कि एक 32bit dll पथ के कारण उठाया गया था और इसे ठीक कर दिया।

यहां छवि विवरण दर्ज करें


5

मेरे पास हाल ही में एक मुद्दा था जहां मैं एक एप्लिकेशन विकसित कर रहा था (जिसमें एक सीरियल पोर्ट का उपयोग किया गया था) और इसने उन सभी मशीनों पर काम किया, जिन पर मैंने इसका परीक्षण किया था, लेकिन कुछ लोगों को यह त्रुटि मिल रही थी।

यह उन सभी मशीनों को चालू करता है, जो त्रुटि हुई थी Win7 x64 चला रहे थे और कभी भी अपडेट नहीं किया गया था।

Windows अद्यतन चलाना मेरे सभी विशेष मामलों में सभी मशीनों को ठीक करता है।


5

मैंने Microsoft Visual Studio 2012 का उपयोग करके क्लाइंट-सर्वर ऐप विकसित करने में समान समस्या का अनुभव किया।

यदि आपने ऐप को विकसित करने के लिए विजुअल स्टूडियो का उपयोग किया है, तो आपको यह सुनिश्चित करना होगा कि नया (यानी वह सॉफ़्टवेयर जिस पर सॉफ्टवेयर विकसित नहीं हुआ था) उपयुक्त Microsoft Visual C ++ Redistributable पैकेज है। उचित रूप से, आपको विज़ुअल C ++ रिडिजाइंडेबल पैकेज के सही वर्ष और बिट संस्करण (यानी 32 बिट के लिए x 64 और 64 बिट के लिए x64) की आवश्यकता है।

Visual C ++ Redistributable पैकेज रन-टाइम घटक स्थापित करते हैं जो Visual Studio का उपयोग करके निर्मित C ++ एप्लिकेशन को चलाने के लिए आवश्यक होते हैं।

यहाँ विजुअल C ++ Redistributable for Visual Studio 2015 का लिंक दिया गया है

कंट्रोल पैनल -> प्रोग्राम्स -> प्रोग्राम्स और फीचर्स में जाकर आप देख सकते हैं कि कौन से वर्जन इंस्टॉल किए गए हैं।

यहां बताया गया है कि मुझे यह त्रुटि कैसे मिली और इसे ठीक किया:

1) मैंने अपने कंप्यूटर पर विजुअल स्टूडियो 2012 का उपयोग करके एक 32 बिट एप्लिकेशन विकसित किया है। चलो मेरे कंप्यूटर को ComputerA कहते हैं।

2) मैंने .exe और संबंधित फ़ाइलों को एक अलग कंप्यूटर पर स्थापित किया है जिसे हम ComputerB कहेंगे।

3) कंप्यूटरबी पर, मैंने .exe चलाया और त्रुटि संदेश मिला।

4) ComputerB पर, मैंने प्रोग्राम्स और फीचर्स को देखा और Visual C ++ 2012 Redistributable (x64) नहीं देखा।

5) कंप्यूटरबी पर, मैंने विजुअल C ++ 2012 के लिए फिर से डिज़ाइन किया और पुनर्वितरण योग्य और x64 संस्करण को चुना और स्थापित किया।

6) कंप्यूटर पर, मैंने कंप्यूटर पर .exe चलाया और त्रुटि संदेश प्राप्त नहीं किया।


3

वास्तव में यह त्रुटि एक अमान्य छवि प्रारूप को इंगित करती है। हालांकि, ऐसा क्यों हो रहा है और आमतौर पर त्रुटि कोड का क्या मतलब है? वास्तव में यह तब प्रकट हो सकता है जब आप 64 बिट विंडोज ऑपरेटिंग सिस्टम के साथ काम करने के लिए बने प्रोग्राम को चलाने की कोशिश कर रहे हों, लेकिन आपका कंप्यूटर 32 बिट ऑपरेटिंग सिस्टम पर चल रहा है।

संभावित कारण:

  • Microsoft दृश्य C ++
  • पुनः आरंभ करने की आवश्यकता है
  • DirectX
  • ।शुद्ध रूपरेखा
  • फिर से स्थापित करने की आवश्यकता है
  • एक प्रशासक के रूप में आवेदन को चलाने की आवश्यकता है

स्रोत: http://www.solveinweb.com/solve-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/


2

यह एक ऐसा मामला हो सकता है जहां डिबगर डीबग करना उपयोगी हो सकता है। अनिवार्य रूप से यदि आप निर्देशों का पालन ​​करते हैं तो आप दो विचारधारा चला सकते हैं और एक दूसरे में डिबग करेगा। यदि आप अपने एप्लिकेशन को एक में रखते हैं, तो आप कभी-कभी उन त्रुटियों को पकड़ सकते हैं जिन्हें आप अन्यथा याद करते हैं। यह आजमाने के काबिल है।


2
यह लगभग निश्चित रूप से लोडर द्वारा रिपोर्ट की गई त्रुटि है और इस तरह प्रक्रिया शुरू होने से पहले होती है। इसलिए डिबगिंग एक विकल्प नहीं होगा। बेशक, मैं अपने निदान में गलत हो सकता हूं कि लोडर द्वारा त्रुटि उठाई गई है।
डेविड हेफर्नन

2

मैंने वीसी ++ को एक मशीन पर निष्पादन योग्य चलाने की त्रुटि देखी है, जिसमें विजुअल C ++ स्थापित नहीं था। रिलीज़ संस्करण का निर्माण करना और उस निश्चित का उपयोग करना।


2

मेरे मामले में त्रुटि तब हुई जब मैंने इसे बनाने के बाद एक डीएलएल का नाम बदला (विजुअल स्टूडियो 2015 का उपयोग करके), ताकि यह एक निष्पादन योग्य द्वारा अपेक्षित नाम फिट हो जाए, जो डीएलएल पर निर्भर था। डिपेंडेंसी वॉकर द्वारा प्रदर्शित निर्यात प्रतीकों की सूची का नाम बदलने के बाद खाली था, और उक्त त्रुटि संदेश "एप्लिकेशन को सही ढंग से शुरू करने में असमर्थ था" प्रदर्शित किया गया था।

तो इसे Visual Studio लिंकर विकल्पों में आउटपुट फ़ाइल नाम को बदलकर ठीक किया जा सकता है।


2

आपके पास यह हो सकता है यदि आप अपने आवेदन को प्रकट करने की कोशिश कर रहे हैं कि यह Microsoft.Windows.Conon-Controls विधानसभा पर निर्भरता है । आप ऐसा तब करते हैं जब आप सामान्य नियंत्रण लाइब्रेरी के संस्करण 6 को लोड करना चाहते हैं - ताकि दृश्य शैलियों को सामान्य नियंत्रणों पर लागू किया जाए।

आपने शायद Windows XP दिनों से Microsoft के मूल दस्तावेज़ीकरण के तरीके का अनुसरण किया है, और अपने आवेदन के प्रकटीकरण में निम्नलिखित को जोड़ा:

<!-- Dependancy on Common Controls version 6 -->
<dependency>
    <dependentAssembly>
        <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="X86"
                publicKeyToken="6595b64144ccf1df"
                language="*"/>
    </dependentAssembly>
</dependency>

Windows XP अब OS नहीं है, और अब आप 32-बिट अनुप्रयोग नहीं हैं। 17 वर्षों के हस्तक्षेप में Microsoft ने अपने प्रलेखन को अद्यतन किया ; अब आपके सामने अपनी अभिव्यक्ति को अपडेट करने का समय है:

<!-- Dependancy on Common Controls version 6 -->
<dependency>
    <dependentAssembly>
        <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"/>
    </dependentAssembly>
</dependency>

रेमंड चेन का कॉमन कंट्रोल का एक प्यारा इतिहास है:


3
"विंडोज एक्सपी अब ओएस नहीं है" मेरा दिन बना: डी
विक्टोरिया

लेकिन मैंने इस सवाल को वापस '12 में पूछा - क्या विंडोज एप्स में भी मैनिफेस्टो थे?
मावग का कहना है कि मोनिका

1
@Mawg यह आपके मुद्दे से संबंधित हो सकता है या नहीं। लेकिन स्टैकओवरफ़्लो ज्ञान के लिए विकि और रेडिट का संयोजन होने के साथ; आपके द्वारा बताई गई सटीक त्रुटि के लिए यह जानना अच्छा है। यह कहने के बाद कि, विंडोज ऐप्स में असेंबली मैनिफ़ेस्ट्स हैं जो विंडोज़ 2000 में वापस जा रहे हैं; और Windows XP से शुरू होने पर आपको comctl32.dll का नवीनतम संस्करण नहीं मिलेगा, जब तक कि आपके असेंबली मेनिफ़ेस्ट ने इस पर निर्भरता की घोषणा नहीं की।
इयान बोयड

1

बस मेरी निजी परियोजना के लिए इस समस्या को हल किया (उसके लिए धन्यवाद के लिए धन्यवाद)। मेरे लिए यह इसलिए था क्योंकि प्रोजेक्ट का रास्ता बहुत लंबा था। .Sln को एक छोटे पथ (C: / MyProjects) में सहेजने के बाद और वहाँ से संकलित करने के बाद यह त्रुटि के बिना चला।


1
@jojodmo: वास्तव में, "मेरे लिए यह इसलिए था क्योंकि प्रोजेक्ट पथ बहुत लंबा था" मुझे लगता है कि बग शिकार के लिए एक वैध योगदान है ...
क्रिश्चियन सेवेरिन

1

"डिपेंडेंसी" को उसी फ़ोल्डर में डाउनलोड और अनज़िप करें जहाँ से आप wget.exe डालते हैं

http://gnuwin32.sourceforge.net/packages/wget.htm

फिर आपके पास कुछ समान * .dll फ़ाइलें और साथ ही wget.exe एक ही फ़ोल्डर में होगी और इसे ठीक काम करना चाहिए।

(मैंने यहां भी उत्तर दिया https://superuser.com/a/873531/146668 जो मुझे मूल रूप से मिला।)


1

मैं बस इस मुद्दे में भाग गया। मैंने विंडोज 10 कंट्रोल पैनल में अपने "एप्स एंड फीचर्स" के तहत "सी ++" की खोज की और देखा कि किसी तरह का अपडेट कुछ दिन पहले ही चला था और 2012-2017 के वीसी ++ को फिर से स्थापित किया गया था। जो एप्लिकेशन त्रुटि संदेश में चल रहा था, उसके लिए केवल VC ++ 2010 की आवश्यकता थी। मैंने उन सभी को अनइंस्टॉल कर दिया और फिर सिर्फ 2010 x86 / x64 को फिर से इंस्टॉल किया, और त्रुटि दूर हो गई और आवेदन अपेक्षित रूप से कार्य किया।


1

ऐसा हो सकता है अगर किसी कारण से x86 मशीन से एक x86 संसाधन लोड किया जाता है। स्पष्ट रूप से इससे बचने के लिए, इस प्रीप्रोसेसर निर्देश को stdafx.h में जोड़ें (बेशक, मेरे उदाहरण में समस्याग्रस्त संसाधन Windows कॉमन कंट्रोल डीएलएल है।

#if defined(_WIN64)
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df'\"")
#endif

1
सामान्य नियंत्रण ऑपरेटिंग सिस्टम का हिस्सा हैं। ऑपरेटिंग सिस्टम जानता है, कहाँ से सही संस्करण लोड करना है। इससे ओपी के मुद्दे को हल करने के लिए कुछ नहीं होता है। यह भी एक निर्भरता स्थापित नहीं करता है। यह सब करता है सामान्य नियंत्रण के संस्करण 6 का उपयोग करने के लिए एक प्रकट संसाधन संकलित करता है। प्रीप्रोसेसर कंडिशन की भी जरूरत नहीं है। बस सेट processorArchitecture='*', और यह सब वहाँ है।
IInspectable

1

यह संभव है कि आपके सिस्टम पर dll (s) के कई संस्करण हों। इसका पता लगाने के लिए आप अपना सिस्टम खोज सकते हैं। इस मुद्दे को केवल आपके मार्ग में निर्देशिकाओं के क्रम को बदलकर हल किया जा सकता है। यह मेरा मुद्दा था। ( क्यूटी के क्यूटी निर्माता जीयूआई के बाहर नहीं चला सकता। "आवेदन सही ढंग से शुरू करने में असमर्थ था (0xc000007b)" त्रुटि )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.