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 | 產品版本 |
比對目標檔案版本號,僅在較新時覆寫,避免降級覆蓋。