Здравствуйте, Аноним, Вы писали:
А>Есть ли какая-нибудь апишная функция чтобы из ехе-шника вытащить версию?
Моно сделать так
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Method name: GetModuleVerStr
// Effect: method retrieves string with version of module
// Return: string with version if success, empty string otherwise
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
string GetNoduleVerStr( const TCHAR* pszModule )throw() // [in] - path for module
{
if( !pszModule )
return _T("");
HANDLE hTmpHandle = 0;
DWORD dwVerInfoSize = ::GetFileVersionInfoSize( const_cast<TCHAR*>(pszModule),
(LPDWORD)&hTmpHandle );
if( !dwVerInfoSize )
return _T("");
PVOID pVerInfoBlock = new BYTE[dwVerInfoSize];
if( !pVerInfoBlock )
return _T("");
if( !::GetFileVersionInfo( const_cast<TCHAR*>(pszModule),
(DWORD)hTmpHandle,
dwVerInfoSize,
pVerInfoBlock ) )
{
delete [](PBYTE)pVerInfoBlock;
return _T("");
}
// get version info
VS_FIXEDFILEINFO* pVer = 0;
UINT uTmp = 0;
if( !VerQueryValue( pVerInfoBlock, _T("\\"), (void**)(&pVer), &uTmp ) )
{
if( pVerInfoBlock )
delete [](PBYTE)pVerInfoBlock;
return _T("");
}
ostrstream ost;
// formatting string with version
ost << (pVer->dwFileVersionMS >> 16) << _T(".") << (pVer->dwFileVersionMS & 0xFFFF) << _T(".");
ost << (pVer->dwFileVersionLS >> 16) << _T(".") << (pVer->dwFileVersionLS & 0xFFFF);
delete [](PBYTE)pVerInfoBlock;
return ost.str();
}