1. ホーム
  2. c++

[解決済み] DLLやEXEファイルのバージョンをプログラムで取得するにはどうすればよいですか?

2023-07-04 23:34:40

質問

C または C++ で Win32 ネイティブ API を使用して DLL または EXE ファイルの製品バージョンとファイル バージョンを取得する必要があります。私は ではなく Windows バージョンではなく、DLL ファイルを右クリックして [プロパティ] を選択し、[詳細] タブを見たときに表示されるバージョン番号を探しています。これは通常、4 つのパートから成るドット付きのバージョン番号 x.x.x.x です。

どのように解決するのですか?

あなたは GetFileVersionInfo API を使用します。

参照 バージョン情報の利用 を参照してください。

サンプルです。

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;
}