」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何以程式設計方式取得 DLL 和 EXE 的版本資訊?

如何以程式設計方式取得 DLL 和 EXE 的版本資訊?

發佈於2024-11-10
瀏覽:752

How to Programmatically Get Version Information for DLLs and EXEs?

如何以程式設計方式取得DLL 和EXE 的版本資訊

在軟體開發領域,經常需要擷取與動態連結程式庫相關的版本資訊( DLL)和可執行程序(EXE)。透過利用可透過 C 或 C 語言存取的 Win32 本機 API,開發人員可以無縫取得這些可執行實體的產品和檔案版本。

GetFileVersionInfo API:解鎖版本資訊

解鎖版本資訊的關鍵位於 GetFileVersionInfo API 中。這個強大的函數用與指定 DLL 或 EXE 檔案相關的資料填入緩衝區。讓我們深入研究其用法的複雜性:

  • 確定檔案大小:GetFileVersionInfoSize 透過提供必要的緩衝區大小來指導記憶體分配的最佳化。
  • 檢索版本資料:GetFileVersionInfo grants存取安全儲存在緩衝區中的版本資訊。
  • 查詢緩衝區:VerQueryValue 提取版本資訊的子集
  • 解釋版本號:透過了解版本資訊的底層結構,開發人員可以準確地從dwFileVersionMS 和dwFileVersionLS 值中解析出由四由部分點組成的版本號碼(x.x.x.x)。

版本檢索實務範例

以下程式碼範例說明了 GetFileVersionInfo API 的實際應用:

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 API 提供了一個全面的解決方案,用於以程式設計方式從 DLL 和 EXE 取得版本資訊。透過利用此功能,開發人員可以自動執行版本檢索任務,確保軟體開發工作的準確性和效率。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3