}BOOL CUpdatePowerMISDlg::GetVersionFromPath(LPSTR lpszFilePath) { DWORD dwFVISize = 0; dwFVISize = GetFileVersionInfoSize(lpszFilePath,0); if (dwFVISize == 0) { TRACE("GetFileVersionInfoSize错误:%d",GetLastError()); strVersion = "1.0.0.1"; return FALSE; } LPBYTE lpVersionInfo = new BYTE[dwFVISize+1]; if(!GetFileVersionInfo( lpszFilePath , 0 , dwFVISize , lpVersionInfo )) { delete [] lpVersionInfo; strVersion = "1.0.0.1"; TRACE("GetFileVersionInfo错误:%d",GetLastError()); return FALSE; } UINT uLen; VS_FIXEDFILEINFO *lpFfi; BOOL bSuccess = VerQueryValue( lpVersionInfo , _T("//") , (LPVOID *)&lpFfi , &uLen ); if (!bSuccess) { delete [] lpVersionInfo; strVersion = "1.0.0.1"; TRACE("VerQueryValue错误:%d",GetLastError()); return FALSE; } DWORD dwFileVersionMS = lpFfi->dwFileVersionMS; DWORD dwFileVersionLS = lpFfi->dwFileVersionLS; delete [] lpVersionInfo; DWORD dwLeftMost = HIWORD(dwFileVersionMS); DWORD dwSecondLeft = LOWORD(dwFileVersionMS); DWORD dwSecondRight = HIWORD(dwFileVersionLS); DWORD dwRightMost = LOWORD(dwFileVersionLS); TRACE( "Version: %d.%d.%d.%d/n" , dwLeftMost, dwSecondLeft, dwSecondRight, dwRightMost ); strVersion.Format("%d.%d.%d.%d",dwLeftMost, dwSecondLeft, dwSecondRight, dwRightMost ); return TRUE; }