البحث عن مسار Windows في LoadLibrary باستخدام البيان
-
03-07-2019 - |
سؤال
إذا اتصلت LoadLibrary
بدون مسار (على سبيل المثال، LoadLibrary("whatever.dll")
, ، سيتبع Windows عمومًا خوارزمية البحث القياسية الخاصة به، وهي نفس الخوارزمية التي يستخدمها للعثور على ملفات EXE.
سؤالي هو هذا:لنفترض أن بيان التطبيق يحدد إصدارًا معينًا من ملف DLL الخاص بالنظام، على سبيل المثال، comctl32.dll 6.0.في هذه الحالة سوف LoadLibrary("comctl32.dll")
انتقل فورًا إلى المجلد الصحيح جنبًا إلى جنب، أم أنه لا يزال يقوم بنوع من البحث؟
المحلول
من مايكروسوفت:
يمكن للتطبيقات التحكم في الموقع الذي يتم تحميل ملف DLL منه عن طريق تحديد مسار كامل، أو باستخدام إعادة توجيه DLL، أو باستخدام ملف البيان.إذا لم يتم استخدام أي من هذه الطرق، فسيقوم النظام بالبحث عن ملف DLL في وقت التحميل كما هو موضح في هذا الموضوع.
لذا، نعم، في حالة وجود بيان، فسوف ينتقل مباشرة إلى مجلد SxS.
نصائح أخرى
للتحقق من أداة التحميل عند مواجهة مشكلات مع المكتبات المفقودة، يمكنك استخدام ميزة "sxstrace". www.codeproject.com/KB/DLL/QueryAssemblyIdentities.aspx يعطي بعض التفاصيل حول التبعيات بين البيان وWinSxs.