利用WinAPI(GetFileVersionInfo)獲取檔案版本資訊

查志強發表於2015-01-08

【原文:http://blog.csdn.net/fw0124/article/details/6210000

1)檔案版本資訊在Windows內部,按照以下格式儲存:
例如:
2.10.0.256
->
dwFileVersionMS = 0x0002000A 高4位元組 = 2 = 0x0002; 低4位元組 = 10 = 0x000A
dwFileVersionLS = 0x00000100 高4位元組 = 0 = 0x0000; 低4位元組 = 256 = 0x0100

2)請注意要把Version.lib加到Link中。

  1. bool GetFileVersion  
  2. (  
  3.     const std::string& filePath,  
  4.     unsigned int &nFileVersionMS,  
  5.     unsigned int &nFileVersionLS  
  6. )  
  7. {  
  8.     DWORD dwHandle;  
  9.     DWORD dwVersionInfoSize;  
  10.     dwVersionInfoSize = ::GetFileVersionInfoSize((char*)filePath.c_str(), &dwHandle);  
  11.   
  12.     if (0 == dwVersionInfoSize)  
  13.     {  
  14.         return false;  
  15.     }  
  16.   
  17.     char* pVersionInfo = new char[dwVersionInfoSize];  
  18.     if (FALSE == ::GetFileVersionInfo((char*)filePath.c_str(), 0, dwVersionInfoSize, pVersionInfo))  
  19.     {  
  20.         delete[] pVersionInfo;  
  21.         return false;  
  22.     }  
  23.   
  24.     VS_FIXEDFILEINFO* pVersion = NULL;  
  25.     unsigned int nLen;  
  26.     if(FALSE == ::VerQueryValue(pVersionInfo, "//", (void**)&pVersion, &nLen))  
  27.     {  
  28.         delete[] pVersionInfo;  
  29.         return false;  
  30.     }  
  31.   
  32.     nFileVersionMS = pVersion->dwFileVersionMS;  
  33.     nFileVersionLS = pVersion->dwFileVersionLS;  
  34.   
  35.     delete[] pVersionInfo;  
  36.     return true;  
  37. }  

相關文章