inline void GetModuleVersion(LPCTSTR filename, CString& FileVersion, CString& ProductVersion ) { LPCTSTR filepath = filename; TCHAR module[1024]; if(filepath == nullptr) { GetModuleFileName(nullptr, module, 1024); filepath = module; } FileVersion.Empty(); ProductVersion.Empty(); DWORD data_len = 0, Handle = 0; data_len = ::GetFileVersionInfoSize(filepath, &Handle); if(data_len == 0) return ; LPVOID data = (LPVOID) new BYTE[data_len]; if(::GetFileVersionInfo(filepath, 0, data_len, data)) { LPVOID ptr = NULL; UINT len = 0; if( VerQueryValue( data, _T("\\"), &ptr, &len) && ptr != nullptr) { VS_FIXEDFILEINFO* info = (VS_FIXEDFILEINFO*) ptr; FileVersion.Format(_T("%u.%u.%u.%u"), info->dwFileVersionMS >> 16, info->dwFileVersionMS & 0xFFFF, info->dwFileVersionLS >> 16 , info->dwProductVersionLS & 0xFFFF); ProductVersion.Format(_T("%u.%u.%u.%u"), info->dwProductVersionMS >> 16, info->dwProductVersionMS & 0xFFFF, info->dwProductVersionLS >> 16 , info->dwProductVersionLS & 0xFFFF); } } delete (LPBYTE)data; }