يعرض Shellexecuteex مع SEE_MASK_FLAG_NO_UI خطأ عند بدء تشغيل تطبيق .NET على النظام بدون .NET

StackOverflow https://stackoverflow.com/questions/2108159

  •  22-09-2019
  •  | 
  •  

سؤال

ال ShellExecuteEx استدعاء وظيفة Win32 لها علامة SEE_MASK_FLAG_NO_UI فيها SHELLEXECUTEINFO الهيكل ، الذي يجب أن يقمع أي مربعات حوار خطأ يمكن عرضها بسبب خطأ عند إطلاق التطبيق.

وثائق MSDN هنا صريح تمامًا حول هذا الموضوع:

SEE_MASK_FLAG_NO_UI
  0x00000400. Do not display an error message box if an error occurs.

في حالتي ، أقوم بتشغيل .NET قابلة للتنفيذ على نظام Windows XP حيث يتم تثبيت NO .NET. أتلقى بشكل منهجي الرسالة التالية ، معروضة بواسطة Windows في نافذة مربع الحوار:

Xxx.exe - Application Error
The application failed to initialize properly (0xc0000135).
Click on OK to terminate the application.
[ OK ]

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

#include <windows.h>

int wmain(int argc, wchar_t* argv[])
{
    SHELLEXECUTEINFO info;
    memset(&info, 0, sizeof(SHELLEXECUTEINFO));
    info.cbSize = sizeof(SHELLEXECUTEINFO);
    info.fMask = SEE_MASK_FLAG_NO_UI;
    info.lpVerb = L"open";
    info.lpFile = L"Xxx.exe";
    info.nShow  = SW_SHOW;
    return ShellExecuteEx (&info);
}

هل هناك طريقة رسمية لقمع رسالة الخطأ إذا لم يكن .NET موجودًا على النظام؟ أم لا بد لي من التحقق من هذا الشرط المحدد بنفسي قبل تنفيذ التطبيق (لكنني لا أعرف مقدمًا ما إذا كان تطبيق .NET أو تطبيق أصلي). وماذا لو أن التطبيق الذي أبدأ به يفتقد بعض DLLs ، على سبيل المثال؟

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

المحلول

يخبر العلم فقط القشرة بعدم عرض رسالة خطأ. لا يؤثر على واجهة المستخدم للعملية التي بدأت. لقد بدأ .NET .exe حقًا حتى قام ShellexeCuteex () بعمله ولم ير أي أخطاء. أنه قرر القصف بعد ذلك وإعلام المستخدم بأنه ليس شيئًا يمكنك إصلاحه بسهولة.

نصائح أخرى

لماذا لا تستخدم عمليه الخلق وظيفة

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