亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何以編程方式獲取DLL或EXE文件的版本?

如何以編程方式獲取DLL或EXE文件的版本?

C++
HUH函數 2019-12-27 09:38:32
我需要使用C或C ++中的Win32本機API獲取DLL或EXE文件的產品版本和文件版本。我不是在尋找Windows版本,而是在DLL文件上單擊鼠標右鍵,選擇“屬性”,然后查看“詳細信息”選項卡所看到的版本號。這通常是一個四部分的虛線版本號xxxx
查看完整描述

3 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

您將使用GetFileVersionInfo API。


請參閱MSDN站點上的使用版本信息。


樣品:


DWORD  verHandle = 0;

UINT   size      = 0;

LPBYTE lpBuffer  = NULL;

DWORD  verSize   = GetFileVersionInfoSize( szVersionFile, &verHandle);


if (verSize != NULL)

{

    LPSTR verData = new char[verSize];


    if (GetFileVersionInfo( szVersionFile, verHandle, verSize, verData))

    {

        if (VerQueryValue(verData,"\\",(VOID FAR* FAR*)&lpBuffer,&size))

        {

            if (size)

            {

                VS_FIXEDFILEINFO *verInfo = (VS_FIXEDFILEINFO *)lpBuffer;

                if (verInfo->dwSignature == 0xfeef04bd)

                {


                    // Doesn't matter if you are on 32 bit or 64 bit,

                    // DWORD is always 32 bits, so first two revision numbers

                    // come from dwFileVersionMS, last two come from dwFileVersionLS

                    TRACE( "File Version: %d.%d.%d.%d\n",

                    ( verInfo->dwFileVersionMS >> 16 ) & 0xffff,

                    ( verInfo->dwFileVersionMS >>  0 ) & 0xffff,

                    ( verInfo->dwFileVersionLS >> 16 ) & 0xffff,

                    ( verInfo->dwFileVersionLS >>  0 ) & 0xffff

                    );

                }

            }

        }

    }

    delete[] verData;

}


查看完整回答
反對 回復 2019-12-27
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

所有這些解決方案均無法正常運行(在我的系統上)。我發現版本號的四個部分中的每個部分都保存為16位值。


前兩個數字保存在32位DWORD dwFileVersionMS中,后兩個數字保存在dwFileVersionLS中。因此,我在輸出部分編輯了您的代碼,如下所示:


    TRACE( "File Version: %d.%d.%d.%d\n",

        ( pFileInfo->dwFileVersionMS >> 16 ) & 0xffff,

        ( pFileInfo->dwFileVersionMS >>  0 ) & 0xffff,

        ( pFileInfo->dwFileVersionLS >> 16 ) & 0xffff,

        ( pFileInfo->dwFileVersionLS >>  0 ) & 0xffff

        );

而且效果很好。輸出的格式類似于我的系統:


主要,次要,修訂版本


查看完整回答
反對 回復 2019-12-27
?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

您可以使用版本信息API獲得此信息。這是一個示例:


void PrintFileVersion( TCHAR *pszFilePath )

{

    DWORD               dwSize              = 0;

    BYTE                *pbVersionInfo      = NULL;

    VS_FIXEDFILEINFO    *pFileInfo          = NULL;

    UINT                puLenFileInfo       = 0;


    // Get the version information for the file requested

    dwSize = GetFileVersionInfoSize( pszFilePath, NULL );

    if ( dwSize == 0 )

    {

        printf( "Error in GetFileVersionInfoSize: %d\n", GetLastError() );

        return;

    }


    pbVersionInfo = new BYTE[ dwSize ];


    if ( !GetFileVersionInfo( pszFilePath, 0, dwSize, pbVersionInfo ) )

    {

        printf( "Error in GetFileVersionInfo: %d\n", GetLastError() );

        delete[] pbVersionInfo;

        return;

    }


    if ( !VerQueryValue( pbVersionInfo, TEXT("\\"), (LPVOID*) &pFileInfo, &puLenFileInfo ) )

    {

        printf( "Error in VerQueryValue: %d\n", GetLastError() );

        delete[] pbVersionInfo;

        return;

    }


    // pFileInfo->dwFileVersionMS is usually zero. However, you should check

    // this if your version numbers seem to be wrong


    printf( "File Version: %d.%d.%d.%d\n",

        ( pFileInfo->dwFileVersionLS >> 24 ) & 0xff,

        ( pFileInfo->dwFileVersionLS >> 16 ) & 0xff,

        ( pFileInfo->dwFileVersionLS >>  8 ) & 0xff,

        ( pFileInfo->dwFileVersionLS >>  0 ) & 0xff

        );


    // pFileInfo->dwProductVersionMS is usually zero. However, you should check

    // this if your version numbers seem to be wrong.


    printf( "Product Version: %d.%d.%d.%d\n",

        ( pFileInfo->dwProductVersionLS >> 24 ) & 0xff,

        ( pFileInfo->dwProductVersionLS >> 16 ) & 0xff,

        ( pFileInfo->dwProductVersionLS >>  8 ) & 0xff,

        ( pFileInfo->dwProductVersionLS >>  0 ) & 0xff

        );

}


查看完整回答
反對 回復 2019-12-27
  • 3 回答
  • 0 關注
  • 718 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號