"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية الحصول على معلومات الإصدار لملفات DLL وEXE برمجيًا؟

كيفية الحصول على معلومات الإصدار لملفات DLL وEXE برمجيًا؟

تم النشر بتاريخ 2024-11-10
تصفح:631

How to Programmatically Get Version Information for DLLs and EXEs?

كيفية الحصول برمجيًا على معلومات الإصدار لمكتبات DLL و EXEs

في مجال تطوير البرمجيات، غالبًا ما يصبح من الضروري استرداد معلومات الإصدار المرتبطة بمكتبات الارتباط الديناميكي ( DLLs) والبرامج القابلة للتنفيذ (EXEs). من خلال استخدام واجهات برمجة تطبيقات Win32 الأصلية التي يمكن الوصول إليها من خلال C أو C، يمكن للمطورين الحصول بسلاسة على إصدارات المنتج والملفات لهذه الكيانات القابلة للتنفيذ.

واجهة برمجة تطبيقات GetFileVersionInfo: فتح معلومات الإصدار

مفتاح فتح معلومات الإصدار يكمن في GetFileVersionInfo API. تقوم هذه الوظيفة القوية بملء مخزن مؤقت بالبيانات المتعلقة بملف DLL أو EXE المحدد. دعونا نتعمق في تعقيدات استخدامه:

  • تحديد حجم الملف: يوجه GetFileVersionInfoSize تحسين تخصيص الذاكرة من خلال توفير حجم المخزن المؤقت المطلوب.
  • استرداد بيانات الإصدار: يمنح GetFileVersionInfo الوصول إلى معلومات الإصدار المخزنة بشكل آمن داخل المخزن المؤقت.
  • الاستعلام عن المخزن المؤقت: يقوم VerQueryValue باستخراج مجموعة فرعية من بيانات الإصدار، بما يتوافق مع المعايير المحددة مسبقًا للمستخدم.
  • تفسير أرقام الإصدارات: من خلال فهم الأساسيات بنية معلومات الإصدار، يمكن للمطورين تحليل رقم الإصدار المنقط المكون من أربعة أجزاء (x.x.x.x) بدقة من قيم dwFileVersionMS وdwFileVersionLS.

مثال على استرجاع الإصدار عمليًا

الكود التالي يوضح النموذج التطبيق العملي لواجهة برمجة تطبيقات GetFileVersionInfo:

DWORD verHandle = 0;
UINT size = 0;
LPBYTE lpBuffer = NULL;
DWORD verSize = GetFileVersionInfoSize(szVersionFile, &verHandle);

if (verSize != NULL) {
    LPSTR verData = new char[verSize];

    if (GetFileVersionInfo(szVersionFile, verHandle, verSize, verData)) {
        if (VerQueryValue(verData, "\\", (VOID FAR * FAR *)&lpBuffer, &size)) {
            if (size) {
                VS_FIXEDFILEINFO *verInfo = (VS_FIXEDFILEINFO *)lpBuffer;
                if (verInfo->dwSignature == 0xfeef04bd) {
                    // Parse the file version into a four-part dotted string
                    TRACE("File Version: %d.%d.%d.%d\n",
                          (verInfo->dwFileVersionMS >> 16) & 0xffff,
                          (verInfo->dwFileVersionMS >>  0) & 0xffff,
                          (verInfo->dwFileVersionLS >> 16) & 0xffff,
                          (verInfo->dwFileVersionLS >>  0) & 0xffff
                          );
                }
            }
        }
    }
    delete[] verData;
}

في الختام، توفر واجهة برمجة تطبيقات GetFileVersionInfo حلاً شاملاً للحصول على معلومات الإصدار برمجيًا من ملفات DLL وEXEs. ومن خلال الاستفادة من هذه الوظيفة، يمكن للمطورين أتمتة مهام استرجاع الإصدارات، مما يضمن الدقة والكفاءة في مساعي تطوير البرامج الخاصة بهم.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3