当前位置:  开发笔记 > 编程语言 > 正文

我如何检索Windows EXE或DLL的版本号?

如何解决《我如何检索WindowsEXE或DLL的版本号?》经验,为你挑选了1个好方法。

如何在运行时检索存储在Windows exe/dll中的版本信息?使用资源文件手动设置此信息.



1> Valentin Gal..:

以下是使用标准Windows API函数的C++方法:

try
{
    TCHAR szFileName[ MAX_PATH ];
    if( !::GetModuleFileName( 0, szFileName, MAX_PATH ) )
        throw __LINE__;

    DWORD nParam;
    DWORD nVersionSize = ::GetFileVersionInfoSize( szFileName, &nParam );
    if( !nVersionSize )
        throw __LINE__;

    HANDLE hMem = ::GetProcessHeap();
    if( !hMem )
        throw __LINE__;

    LPVOID lpVersionData = ::HeapAlloc( hMem, 0, nVersionSize );
    if( !lpVersionData )
        throw __LINE__;

    if( !::GetFileVersionInfo( szFileName, 0, nVersionSize, lpVersionData ) )
        throw __LINE__;

    LPVOID pVersionInfo;
    UINT nSize;
    if( !::VerQueryValue( lpVersionData, _T("\\"), &pVersionInfo, &nSize ) )
        throw __LINE__;

    VS_FIXEDFILEINFO *pVSInfo = (VS_FIXEDFILEINFO *)pVersionInfo;
    CString strVersion;
    strVersion.Format( _T(" version %i.%i.%i.%i"),
        pVSInfo->dwProductVersionMS >> 16,
        pVSInfo->dwProductVersionMS & 0xFFFF,
        pVSInfo->dwProductVersionLS >> 16,
        pVSInfo->dwProductVersionLS & 0xFFFF
        );
    GetDlgItem( IDC_ABOUT_VERSION )->SetWindowText( strAppName + strVersion );

    if( !HeapFree( hMem, 0, lpVersionData ) )
        throw __LINE__;
}
catch( int err )
{
    ASSERT( !err ); // always break on debug builds to inspect error codes and such

    DWORD dwErr = ::GetLastError();

    // handle memory cleanup...
}

请注意,catch部分纯粹是教育性的 - 在实际情况下,您可以在内存分配后正确清理并实际使用错误代码!

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有