2012-05-08 20 views
129

मेरे पास एक क्लाइंट/सर्वर ऐप है जिसे मैं एक पीसी पर विकसित कर रहा हूं। अब इसे दो धारावाहिक बंदरगाहों की जरूरत है, इसलिए मैंने एक दोस्त से एक पीसी उधार लिया।एप्लिकेशन सही ढंग से शुरू करने में असमर्थ था (0xc000007b)

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

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

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

क्या कोई मुझे इस पर ट्रैक करने के तरीके के बारे में संकेत दे सकता है?

+5

, तो आप उपयोग कर सकते हैं [com0com] (http://com0com.sourceforge.net) एक पीसी पर आभासी धारावाहिक बंदरगाहों को स्थापित करने के लिए। डीबगिंग और परीक्षण के लिए बढ़िया, बस 2 वर्चुअल पोर्ट बनाएं और उन्हें कॉन्फ़िगर में एक साथ लिंक करें, फिर प्रत्येक पोर्ट पर अपने ऐप्स चलाएं ताकि वे एक-दूसरे से बात कर सकें @ mj2008 लापता DLL एक देता है। –

+1

आप की जाँच क्या विंडोज घटनाक्रम प्रवेश करें? कभी कभी विंडोज के बारे में जो DLL एप्लिकेशन विफल कर दिया और अधिक जानकारी प्रदान करता है। –

+1

यह एक लापता DLL मुझे लगता है, आम तौर पर कुछ उपयोगिता, या यहाँ तक स्मृति प्रबंधक हो जाएगा। – mj2008

उत्तर

114

शुरू करने के लिए, मैं वहाँ अपने आवेदन और उसके निर्भरता dependency walker

+24

विंडोज त्रुटि कोड के आधार पर (http://www.google.de/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=1&ved=0CIYBEBYwAA&url=http%3A%2F%2Fdownload.microsoft।कॉम% 2Fdownload% 2F9% 2F5% 2FE% 2F95EF66AF-9026-4BB0-A41D-A4F81802D92C% 2F% 5BMS-ERREF% 5D.pdf और Ei = 17GoT53mCK_R4QSGm6WRCQ और यूएसजी = AFQjCNHu2-WVJpA7ViG5e-GAne_gCH9Rzw और sig2 = f1N9anRoFy8qDuth62oK7g), इस त्रुटि कोड का अर्थ है: 0xC000007B STATUS_INVALID_IMAGE_FORMAT। – mox

+78

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

+3

वास्तव में, यह त्रुटि कोड पीडीएफ फ़ाइल एक उत्कृष्ट स्रोत है। – mox

42

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

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

+0

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

2

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

+2

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

12

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

5

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

यह पता चला है कि सभी मशीनों त्रुटि पर Win7 x64 चल रहे थे हुआ है और कभी नहीं एक बार अपडेट किया गया था।

विंडोज अपडेट चलाने से मेरे विशेष मामले में सभी मशीनें ठीक हो गईं।

2

मैंने एक मशीन पर वीसी ++ डीबग निष्पादन योग्य चलाने की कोशिश में त्रुटि देखी है जिसमें Visual C++ स्थापित नहीं है। रिलीज संस्करण बनाना और इसे ठीक करना।

1

बस मेरी व्यक्तिगत परियोजना (उस के लिए ड्रॉज़ के लिए धन्यवाद) के लिए इस समस्या को हल किया। मेरे लिए ऐसा इसलिए था क्योंकि परियोजना पथ बहुत लंबा था। .sln को एक छोटे से पथ (सी:/MyProjects) में सहेजने के बाद और वहां से संकलन त्रुटि के बिना भाग गया।

+1

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

3

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

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

  • माइक्रोसॉफ्ट विज़ुअल सी ++
  • DirectX को पुनः आरंभ करने की आवश्यकता है
  • .नेट फ्रेमवर्क
  • करने की आवश्यकता को फिर से स्थापित
  • एक के रूप में आवेदन चलाने की आवश्यकता व्यवस्थापक

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

9

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

1
इसके अलावा

डाउनलोड करने और एक ही फ़ोल्डर में "निर्भरता" तुम कहाँ से

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

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

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

3

मैं माइक्रोसॉफ्ट विजुअल स्टूडियो 2012

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

The Visual C++ Redistributable Packages install run-time components that are required to run C++ applications built using Visual Studio.

यहां Visual C++ Redistributable for Visual Studio 2015 का एक लिंक है।

आप देख सकते हैं कि नियंत्रण कक्ष -> प्रोग्राम्स -> प्रोग्राम्स और फीचर्स पर जाकर कौन से संस्करण स्थापित किए गए हैं।

1) मैं अपने कंप्यूटर पर Visual Studio 2012 का उपयोग कर एक 32 बिट आवेदन विकसित:

यहाँ कैसे मैं यह त्रुटि आई और यह तय हो गई है। चलिए अपने कंप्यूटर ComputerA को कॉल करते हैं।

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

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

4) ComputerB पर, मैं प्रोग्राम और सुविधाएँ को देखा और विजुअल C++ 2012 पुनर्वितरण (64) नहीं देखा।

5) ComputerB पर, मैं विज़ुअल सी ++ 2012 पुनर्वितरण के लिए googled और चयनित और x64 संस्करण स्थापित किया।

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

6

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

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

enter image description here

2

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

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

1

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

1

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

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

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

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