- //lpszFilePath 为某文件的完整路径
- CString GetFileVersion(LPCTSTR lpszFilePath)
- {
- CString szFilePath(lpszFilePath);
- CString szResult(_T("0.0.0.0"));
- if (szFilePath.GetLength() > 0 && PathFileExists(szFilePath))
- {
- VS_FIXEDFILEINFO *pVerInfo = NULL;
- DWORD dwTemp, dwSize;
- BYTE *pData = NULL;
- UINT uLen;
- dwSize = GetFileVersionInfoSize(lpszFilePath, &dwTemp);
- if (dwSize == 0)
- {
- return szResult;
- }
- pData = new BYTE[dwSize+1];
- if (pData == NULL)
- {
- return szResult;
- }
- if (!GetFileVersionInfo(lpszFilePath, 0, dwSize, pData))
- {
- delete[] pData;
- return szResult;
- }
- if (!VerQueryValue(pData, TEXT("\\"), (void **)&pVerInfo, &uLen))
- {
- delete[] pData;
- return szResult;
- }
- DWORD verMS = pVerInfo->dwFileVersionMS;
- DWORD verLS = pVerInfo->dwFileVersionLS;
- DWORD major = HIWORD(verMS);
- DWORD minor = LOWORD(verMS);
- DWORD build = HIWORD(verLS);
- DWORD revision = LOWORD(verLS);
- delete[] pData;
- szResult.Format(TEXT("%d.%d.%d.%d"), major, minor, build, revision);
- }
- return szResult;
- }