#define SZNA "N/A"
//Not thread safe
char szVersion[32] = SZNA;
LPTSTR GetFileVersionString(LPTSTR szPath)
{
unsigned int dwLen = GetFileVersionInfoSize(szPath, NULL);
if (0 == dwLen)
{
strncpy(szVersion, "N/A", sizeof(szVersion));
return szVersion;
}
char *lpData = new char[dwLen];
ASSERT(lpData);
if (0 == GetFileVersionInfo(szPath, NULL, dwLen, (LPVOID)lpData))
{
strncpy(szVersion, "N/A", sizeof(szVersion));
delete lpData;
return szVersion;
}
VS_FIXEDFILEINFO *pVsInfo;
if (0 == VerQueryValue(lpData, "\\",(LPVOID *)&pVsInfo, &dwLen))
{
strncpy(szVersion, "N/A", sizeof(szVersion));
delete lpData;
return szVersion;
}
_snprintf(szVersion, sizeof(szVersion), "%d.%d.%d.%d"
, HIWORD(pVsInfo->dwFileVersionMS)
, LOWORD(pVsInfo->dwFileVersionMS)
, HIWORD(pVsInfo->dwFileVersionLS)
, LOWORD(pVsInfo->dwFileVersionLS)
);
delete lpData;
return szVersion;
}