获取文件版本号

获取文件版本号

Windows API提供了一组获取文件(这里只讨论可执行文件和DLL)版本号的函数:

GetFileVersionInfoSize

GetFileVersionInfo

VerQueryValue

使用时有几点要注意的:

1.GetFileVersionInfoSize要在GetFileVersionInfo之前调用,以获取版本信息长度,然后分配合适的内存。

2.VerQueryValue中的分割符定义在获取版本号时使用"//"

BOOL CModuleVersionViewDlg::GetPEVersion(CString FileName, WORD& MajorVersion, WORD& MinorVersion, WORD& BuildNumber, WORD& Revision)
{
	VS_FIXEDFILEINFO	*lpBuf = NULL;
	DWORD	dwLen = 0;
	DWORD	dwHandle = 0;
	LPTSTR	lpData = NULL;
	BOOL	bRc = TRUE;
	UINT	uiLen = 0;
	DWORD	dwError = 0;

	dwLen = GetFileVersionInfoSize(FileName, &dwHandle);
	if ((0 == dwLen) && (0 != (dwError = GetLastError())))
	{
		TRACE(_T("GetFileVersionInfoSize fail!"));
		return FALSE;
	}
	
	lpData = new TCHAR [dwLen];
	ASSERT(lpData);

	bRc = GetFileVersionInfo(FileName, dwHandle, dwLen, lpData);
	if ((FALSE == bRc) && (0 != GetLastError()))
	{
		TRACE(_T("GetFileVersionInfo fail!"));
		return FALSE;
	}

	bRc = VerQueryValue(lpData, _T("//"), (LPVOID *)&lpBuf, &uiLen);
	if ((FALSE == bRc) && (0 != GetLastError()))
	{
		TRACE(_T("VerQueryValue fail!"));
		return FALSE;
	}

	MajorVersion = HIWORD(lpBuf->dwFileVersionMS);
	MinorVersion = LOWORD(lpBuf->dwFileVersionMS);
	BuildNumber = HIWORD(lpBuf->dwFileVersionLS);
	Revision = LOWORD(lpBuf->dwFileVersionLS);

	return FALSE;
}
posted on 2011-08-08 11:07 Jack Hens 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/blackmick/archive/2011/08/08/2128903.html

你可能感兴趣的:(获取文件版本号)