最近做一个自动升级程序,发现需要取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
;
}
241

被折叠的 条评论
为什么被折叠?



