"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > DLL और EXE के लिए प्रोग्रामेटिक रूप से संस्करण जानकारी कैसे प्राप्त करें?

DLL और EXE के लिए प्रोग्रामेटिक रूप से संस्करण जानकारी कैसे प्राप्त करें?

2024-11-10 को प्रकाशित
ब्राउज़ करें:470

How to Programmatically Get Version Information for DLLs and EXEs?

डीएलएल और ईएक्सई के लिए प्रोग्रामेटिक रूप से संस्करण जानकारी कैसे प्राप्त करें

सॉफ्टवेयर विकास के दायरे में, डायनेमिक लिंक लाइब्रेरी से जुड़े संस्करण की जानकारी प्राप्त करना अक्सर आवश्यक हो जाता है ( डीएलएल) और निष्पादन योग्य प्रोग्राम (ईएक्सई)। C या C के माध्यम से पहुंच योग्य Win32 मूल API का उपयोग करके, डेवलपर्स इन निष्पादन योग्य संस्थाओं के उत्पाद और फ़ाइल संस्करणों को सहजता से प्राप्त कर सकते हैं।

GetFileVersionInfo API: संस्करण जानकारी अनलॉक करना

संस्करण जानकारी अनलॉक करने की कुंजी GetFileVersionInfo API में निहित है। यह शक्तिशाली फ़ंक्शन निर्दिष्ट DLL या EXE फ़ाइल से संबंधित डेटा के साथ एक बफर पॉप्युलेट करता है। आइए हम इसके उपयोग की जटिलताओं को समझें:

  • फ़ाइल का आकार निर्धारित करें: GetFileVersionInfoSize अपेक्षित बफर आकार प्रदान करके मेमोरी आवंटन के अनुकूलन का मार्गदर्शन करता है।
  • संस्करण डेटा पुनर्प्राप्त करना: GetFileVersionInfo अनुदान बफ़र के भीतर सुरक्षित रूप से संग्रहीत संस्करण जानकारी तक पहुंच।
  • क्वेरी करना बफ़र: VerQueryValue उपयोगकर्ता के पूर्वनिर्धारित मानदंडों से मेल खाते हुए संस्करण डेटा का एक सबसेट निकालता है। ) dwFileVersionMS और dwFileVersionLS से मान।
  • अभ्यास में संस्करण पुनर्प्राप्ति का उदाहरण

निम्नलिखित कोड नमूना GetFileVersionInfo API के व्यावहारिक अनुप्रयोग को दर्शाता है:

DWORD verHandle = 0; यूआईएनटी आकार = 0; एलपीबीवाईटीई एलपीबफ़र = शून्य; DWORD verSize = GetFileVersionInfoSize(szVersionFile, &verHandle); यदि (verSize != NULL) { LPSTR verData = नया char[verSize]; यदि (GetFileVersionInfo(szVersionFile, verHandle, verSize, verData)) { यदि (VerQueryValue(verData, "\\", (शून्य FAR * FAR *)&lpबफ़र, &आकार)) { अगर (आकार) { VS_FIXEDFILEINFO *verInfo = (VS_FIXEDFILEINFO *)lpBuffer; यदि (verInfo->dwSignature == 0xfeef04bd) { // फ़ाइल संस्करण को चार-भाग वाली बिंदीदार स्ट्रिंग में पार्स करें ट्रेस("फ़ाइल संस्करण: %d.%d.%d.%d\n", (verInfo->dwFileVersionMS >> 16) और 0xffff, (verInfo->dwFileVersionMS >> 0) और 0xffff, (verInfo->dwFileVersionLS >> 16) और 0xffff, (verInfo->dwFileVersionLS >> 0) और 0xffff ); } } } } हटाएँ[] verData; }
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;
}
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3