سؤال

بلدي ج(++) البرنامج مكتوبة و تجميعها باستخدام Visual C(++)/Visual Studio يعمل بشكل جيد على بلدي آلة, ولكن يرفض تشغيلها على جهاز آخر.رسالة الخطأ أحصل عليه "هذا التطبيق فشل في بدء التشغيل بسبب تكوين التطبيق غير صحيح.إعادة تثبيت التطبيق قد إصلاح هذه المشكلة."

هل كانت مفيدة؟

المحلول

إذا كنت كتابة C++ برنامج, روابط حيوي إلى مكتبة وقت تشغيل C أو CRT لفترة قصيرة.هذه المكتبة تحتوي على printf ، malloc ، strtok.. الخ.المكتبة الواردة في ملف يسمى MSVCR80.DLL.هذا الملف هو ليس افتراضيا المثبتة على نظام ويندوز ، وبالتالي لا يمكن تشغيل التطبيق.

الحل ؟ إما تثبيت DLL على الجهاز الهدف عن طريق VCREDIST.EXE (Visual C++ Redistributable حزمة) أو رابط CRT ثابت (المكونات الفعلية رمز الوظائف المستخدمة مباشرة إلى EXE).

توزيع وتركيب VCREDIST جنبا إلى جنب مع تطبيق بسيط هو ألم في المؤخرة ، لذلك أنا اخترت الخيار الثاني:ثابت ربط.فإنه من السهل حقا:انتقل إلى المشروع الخاص بك خصائص تتكشف C/C++, انقر فوق رمز جيل ، وتعيين مكتبة وقت التشغيل إلى أحد غير DLL الخيارات.هذا كل ما في الأمر.

نصائح أخرى

المشكلة هنا هو مفقود DLL التبعية ، مثل CRT (مكتبة وقت تشغيل C).وسيلة جيدة لتشخيص هذا النوع من مشكلة التبعية ووكر (depends.exe) التي يمكنك أن تجد هنا:

http://www.dependencywalker.com/

يمكنك تشغيل هذا البرنامج على جهاز الكمبيوتر الذي يقوم بإنشاء رسالة الخطأ التي نشرها واستخدامها لفتح exe أن إنشاء هذا الخطأ.التبعية ووكر بسرعة و بيانيا تشير إلى أي ملفات Dll المطلوبة ولكن لا تتوفر على الجهاز.

وهناك احتمالات عالية أن كنت أفتقد مكتبات وقت تشغيل Visual Studio (CRT وغيرها) ، يمكنك التخلص من تلك التبعيات (رابط ثابت) أو تثبيت VC redist حزم على الكمبيوتر الهدف.

اعتمادا على Visual C++ الإصدار الذي تستخدمه ، يجب عليك تثبيت حزم مختلفة :

Visual C++ 2005

Visual C++ 2005 SP1

Visual C++ 2008

تحذير :هذه الحزم تحتوي فقط على الإصدارات من المكتبات ، إذا كنت تريد أن تكون قادرة على توزيع يبني التصحيح من التطبيق الخاص بك يجب أن تأخذ الرعاية المطلوبة دلل نفسك.

انه من أبسط لربط وقت التشغيل بشكل ثابت.

c++ -> رمز جيل -> مكتبة وقت التشغيل واختر "متعددة الخيوط /MT"

إلا أن هذا لا تجعل القابلة للتنفيذ الخاص بك بضع مئات من KByte أكبر.قد تكون هذه المشكلة إذا كنت تقوم بتثبيت عدد كبير من البرامج الصغيرة ، لأن كل سوف تكون مثقلة لها نسخة خاصة جدا من وقت التشغيل.الجواب هو خلق المثبت.

مشروع جديد -> "إعداد و نشر" -> "مشروع إعداد"

الحمل الناتج من التطبيق الخاص بك المشاريع ( المعرفة باستخدام إصدار DLL وقت التشغيل ) في المثبت المشروع و بناء عليه.الاعتماد على وقت التشغيل DLL سوف يكون لاحظت ، وشملت في حزمة المثبت و بدقة و بشكل مخفي تثبيتها في المكان الصحيح على الجهاز المستهدف.

الصحيح VC Redist حزمة بالنسبة لك هو جزء من تثبيت Visual Studio.عن VC 8 ، يمكنك العثور عليها هنا:

\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86

ممكن حل........

تحرير:(إزالة أكثر من منصبي) قصة قصيرة طويلة, كنت أعاني من مشاكل مماثلة ، الحصول على "تكوين التطبيق غير صحيح" الرسائل الخ الخ.Depends.exe فقط العثور على ieshims.dll و wer.dll ممكن من القضايا ، ولكن ليست هذه هي المشكلة.لقد انتهت باستخدام مؤشرات (/mt) ترجمة الخيار.ماذا عملت على الرغم حل عملي يجعل المثبت مع InstallShield.لقد اختارت العديد من الوحدات النمطية دمج في installshield باني هذا يبدو أن يكون ثابت مشكلتي.الوحدات المختارة هي:VC++ 9.0 CRT, VC++ 9.0 التصحيح CRT ، CRT WinSXS MSM دمج وحدة.أنا متأكد من WinSXS دمج الوحدة النمطية التي تم إصلاح ذلك.

تصحيح CRT:لاحظت في مكان ما (مهما حاولت ، و من الواضح فشل حتى الآن) ، الإصدار لا يزال يعتمد على تصحيح CRT.إذا كان هذا هو الحال ، InstallShield دمج وحدة قد وضع التصحيح CRT مجلد في المجلد WinSXS :) كونها نوعا من المبتدئين مع VC++ أفترض أن هذا عادة ما يتم استخدامها لتوزيع إصدارات تصحيح الأخطاء البرامج الخاصة بك إلى أشخاص آخرين.لاختبار ما إذا كان هذا هو ما ثابت مشكلتي أنني إزالة التصحيح CRT مجلد من مجلد WinSXS و التطبيق لا يزال يعمل.(إلا شيء لا يزال قيد التشغيل في الخلفية الخ الخ - أنا لست في ذلك)

على أي حال, هذا وقد حصلت الأشياء تعمل معي على XP SP3 محدثة بالكامل آلة أيضا على VMWare XP SP3 آلة مع عظام (.net framework 3.5 و VC++ 2008 RTM الأساس) و أيضا على زميله XP الجهاز حيث أنه في السابق لم يكن يعمل.

حتى تعطي هذه الأشياء المحاولة, قد يكون لديك بعض الحظ.

أول شيء يجب عليك استخدام

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1

أو إضافة _BIND_TO_CURRENT_VCLIBS_VERSION=1 إلى توجيهات المعالج.

المشكلة تتعلق ملزمة بيان أنواع, يمكنك العثور على مزيد من http://www.nuonsoft.com/blog/2008/10/29/binding-to-the-most-recent-visual-studio-libraries/

من خلال ذلك التطبيق الخاص بك سوف تعمل مع مجموعة أكبر من مكتبات وقت التشغيل الإصدارات.

في كثير من الأحيان هذا الخطأ هو نتيجة محاولة تشغيل إصدار تصحيح تطبيق يستخدم .صافي.منذ .صافي الحزمة القابلة لإعادة التوزيع لا تشمل إصدارات تصحيح الأخطاء dlls التي يتم تثبيتها مع Visual Studio ، سوف التطبيق الخاص بك في كثير من الأحيان الحصول على هذا الخطأ عند تشغيله على أي آلة أخرى أن لا يكون لديك Visual Studio مثبتا.إذا كنت لم تقم بذلك بالفعل ، في محاولة بناء الإصدار من التطبيق الخاص بك ومعرفة ما إذا كان يعمل.

لاحظ أيضا أنه إذا قمت بتغيير الساكنة وقت, سيكون لديك لتفعل الشيء نفسه بالنسبة MFC إذا كان التطبيق الخاص بك يستخدم MFC.هذه الإعدادات في خصائص->Configuration/العامة

أنا واجهت هذه المشكلة و كان قادرا على إصلاح ذلك ببساطة شديدة.

Visual studio يتيح لك خيار (افتراضيا) لبناء واضح لكل بناء.

الظاهر كان وضعه في مجلد الإفراج ، لكنها كانت مختلفة الإفراج عن مجلد من exe.

حتى عند استخدام الإعداد المرافق لم يكن تعبئتها.

يجب عليك البحث عن ملف أسماء شيئا مثل myprogram.exe.indermediate.واضح

إذا كان هذا هو في نفس المجلد مثل exe (و لديك كل dlls) أنه ينبغي تشغيل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top