본문 바로가기
코드 조각

GetFileVersionInfo : 파일 버전 가져오기

by ictlab 2012. 3. 21.


  
//---------------------------------------------------------------------------
// << Version String >>
// {"CompanyName", "FileDescription", "FileVersion", "InternalName"
// , "LegalCopyright", "LegalTradeMarks", "OriginalFileName", "ProductName", "ProductVersion", "Comments"};
//----------------------------------------------------------------------------

// ---------------------------------------------------------------------------
AnsiString __fastcall GetFileVersionInfo(AnsiString filename)
{
   AnsiString sFileVersion; // Return 될 Version 정보.

    DWORD dwHandle = 0, dwVersionInfoSize;
    UINT uLength;
    LPVOID pFileInfo, ptr;

    dwVersionInfoSize = GetFileVersionInfoSize(filename.c_str(), &dwHandle);
    if (dwVersionInfoSize < 2) return "0.0.0"; // 실행화일에 버젼 정보 표시가 되어 있지 않을 경우
    pFileInfo = (LPVOID)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwVersionInfoSize);

    GetFileVersionInfo(filename.c_str(), dwHandle, dwVersionInfoSize, pFileInfo);
    VerQueryValue(pFileInfo, TEXT("\\VarFileInfo\\Translation"), &ptr, &uLength);

    WORD *id = (WORD*)ptr;
    AnsiString szString = "\\StringFileInfo\\" + IntToHex(id[0], 4) + IntToHex(id[1], 4) + "\\FileVersion";

    VerQueryValue(pFileInfo, szString.c_str(), &ptr, &uLength);
    sFileVersion = (char*)ptr;
    HeapFree(GetProcessHeap(), 0, pFileInfo);
    return sFileVersion;
}

// ---------------------------------------------------------------------------
//사용예
void __fastcall TF_Main::FormCreate(TObject *Sender)
{

    L_AppVer->Caption="Version"+ GetFileVersionInfo(ExtractFileName(ParamStr(0))); //실행파일 버젼

    L_XVisionVer->Caption="XVison " + GetFileVersionInfo("XVision140.bpl"); //특정 모듈 버젼

}
// ---------------------------------------------------------------------------