Re: Версия exe или dll файла
От: LeOnIdX Россия  
Дата: 14.04.04 12:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть ли какая-нибудь апишная функция чтобы из ехе-шника вытащить версию?


Моно сделать так
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 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();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.