最近做一个自动升级程序,发现需要取DLL或EXE的版本号,通过版本号比较才知道需不需要升级,看了一些网上的材料,有的太复杂,有的明显对SDK API理解不够,写个函数出来供大家参考:
bool __fastcall GetFileVer(String FileName, String &Ver)
{
unsigned int iZero = 0, iLen = 0;
Ver = "";
iLen = GetFileVersionInfoSize(FileName.c_str(), (unsigned long *)&iZero); // 获取到底需要多大内存缓冲区
if(iLen > 0)
{
char *Buffer = new char [iLen+1];
try
{
if (GetFileVersionInfo(FileName.c_str(), NULL, iLen, Buffer) != 0) // 获取版本信息放入缓冲区
{
iLen = 0;
VS_FIXEDFILEINFO *FileInfo = NULL;
if (VerQueryValue(Buffer, "//", (void **)&FileInfo, &iLen) != 0) // 只查询VS_FIXEDFILEINFO的版本信息
{
#ifdef _DEBUG
if (iLen != sizeof (VS_FIXEDFILEINFO))
{
throw Exception("GetFileVer Failure !");
}
#endif
if (FileInfo != NULL)
{
Ver = IntToStr(FileInfo->dwFileVersionMS / 0x10000) + "." + IntToStr(FileInfo->dwFileVersionMS % 0x10000);
Ver += "." + IntToStr(FileInfo->dwFileVersionLS / 0x10000) + "." + IntToStr(FileInfo->dwFileVersionLS % 0x10000);
return true ;
}
}
}
}
__finally
{
delete []Buffer;
}
}
return false ;
}