首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

取得檔案版本資訊:GetFileVersionInfo/VerQueryValue 解析版本號、公司名、著作權等

     編輯:VC 教學

核心流程

  1. `GetFileVersionInfoSize` 取得資源大小。
  2. 配置緩衝區、`GetFileVersionInfo` 讀入。
  3. `VerQueryValue(buf, "\\VarFileInfo\\Translation", ...)` 取得語言/代碼頁 (如 `040904B0`)。
  4. 構造字串查詢路徑:`\\StringFileInfo\\\\` (Key: `FileVersion`, `CompanyName`, `FileDescription`, `LegalCopyright`, `ProductName`, `ProductVersion`...)。
  5. `VerQueryValue` 取得字串指標與長度,轉為 `AnsiString`。

完整函式 (取版本號)


AnsiString GetFileVersion(AnsiString FileName)
{
    DWORD dwHandle=0, InfoSize = GetFileVersionInfoSize(FileName.c_str(), &dwHandle);
    if (!InfoSize) return "";
    char *buf = new char[InfoSize];
    GetFileVersionInfo(FileName.c_str(), 0, InfoSize, buf);
    char *pVal; UINT len;
    // 取翻譯資訊
    VerQueryValue(buf, "\\VarFileInfo\\Translation", (void**)&pVal, &len);
    WORD lang = *reinterpret_cast(pVal);
    WORD cp   = *reinterpret_cast(pVal+2);
    AnsiString key = "\\StringFileInfo\\" + IntToHex(lang,4) + IntToHex(cp,4) + "\\FileVersion";
    VerQueryValue(buf, key.c_str(), (void**)&pVal, &len);
    AnsiString ver = AnsiString(pVal).SetLength(len-1); // 移除結束符
    delete[] buf;
    return ver;
}

常用鍵值對照

Key含義
CompanyName公司名稱
FileDescription檔案描述
FileVersion檔案版本
InternalName內部名稱
LegalCopyright版權聲明
OriginalFilename原始檔名
ProductName產品名稱
ProductVersion產品版本

安裝程式應用

比對目標檔案版本號,僅在較新時覆寫,避免降級覆蓋。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved