لا يمكن تشغيل تطبيق 16 بت بعد الآن
-
03-10-2019 - |
سؤال
أحاول تصحيح بعض المشكلات وحل بعض المشكلات مع تطبيق 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()
وظيفة.
يتم إطلاق التطبيق مرة أخرى. حاليا يمكنني الاستمرار في إصلاح راحة من البرنامج!