سؤال

أحاول تصحيح بعض المشكلات وحل بعض المشكلات مع تطبيق Macro Win32 مكتوب C ++ ومع ذلك أواجه أغرب مشكلة.

لا بد لي من إطلاق برنامج 16 بت ثم محاكاة إدخال البيانات فيه وأستخدم Shellexecute لأكثر من عامين حتى الآن. لم أتطرق إلى هذا الكود الفعلي على الإطلاق ، لكنه الآن لا يعمل.

انا افعل ShellExecute(NULL, "open", exe_path.c_str(), NULL, "", SW_SHOWDEFAULT);. لقد نجح هذا في عيب لسنوات ولكن فجأة ، توقف عن العمل. إنه يعطيني رمز خطأ access_denied. لقد غوغل ويبدو أن هذه مشكلة شائعة جدًا في إطلاق تطبيقات 16 بت.

لم تتغير بيئة Workstation XP SP2 على الإطلاق ، وكانت تعمل فعليًا حتى أعيد بناؤها منذ فترة قصيرة (لقد قمت بإعادة بنائها قبل عدة مرات).

يوجد الرمز داخل وظيفة إجراء النافذة ، وعندما أخرجه وأطلق البرنامج في وظيفة WinMain ، فإنه يعمل ، ولكن يجب أن يكون الكود في إجراء النافذة ...

لقد جربت العديد من البدائل لكنهم يعطون نفس القضية.

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

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

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

المحلول

لقد اكتشفت المشكلة. لقد غيرت lpDirectory المعلمة (التي كنت أمززها NULL أو "") إلى دليل التنفيذ ، باستخدام PathRemoveFileSpec() وظيفة.

يتم إطلاق التطبيق مرة أخرى. حاليا يمكنني الاستمرار في إصلاح راحة من البرنامج!

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