Versionsnummer auslesen

Frido

Grünschnabel
Weis jemand wie ich die Versionsnummer aus der Versionstabelle (Visual Studio)
auslesen kann?


Ich habe es mit GetFileVersionInfo probiert, was aber nicht so funktioniert wie ich das möchte.

vielleicht weis ja jemand von euch wie das geht,
 
Ist ein bisschen kompliziert, aber hier ein Schnipsel. Der geht von einer 4 stelligen Versionsnummer aus (z.Bsp: 1.2.3.4):

Code:
bool CWinUtils::GetVersionInfo( HINSTANCE hInstance, DWORD dwResourceID, DWORD& dwMajor, DWORD& dwMinor, 
                                DWORD& dwBuildNumber, DWORD& dwSubBuild )
{

  HRSRC   hrSrc = FindResource( hInstance, MAKEINTRESOURCE( dwResourceID ), RT_VERSION );
  if ( hrSrc == NULL )
  {
    return false;
  }
  HGLOBAL hGlobal = LoadResource( hInstance, hrSrc );

  BYTE*   pBlock = (BYTE*)GlobalLock( hGlobal );

  DWORD   dwSize = SizeofResource( hInstance, hrSrc );

  BYTE*   pData = new BYTE[dwSize * 2];

  memset( pData, 0, dwSize * 2 );

  memcpy( pData, pBlock, dwSize );

  struct LANGANDCODEPAGE {
    WORD wLanguage;
    WORD wCodePage;
  } * lpTranslate;

  UINT    cbTranslate;


  // Read the list of languages and code pages.

  VerQueryValue( pData, 
                TEXT("\\VarFileInfo\\Translation"),
                (LPVOID*)&lpTranslate,
                 &cbTranslate );

  // Read the file description for each language and code page.
  char    SubBlock[50];

  for( size_t i = 0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
  {
    wsprintf( SubBlock,
              TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"),
              lpTranslate[i].wLanguage,
              lpTranslate[i].wCodePage);

    // Retrieve file description for language and code page "i". 
    LPVOID     pBuffer = NULL;

    DWORD     dwLength = 0;

    VerQueryValue( pData, 
                  SubBlock, 
                  &pBuffer, 
                  (PUINT)&dwLength ); 

    std::string     strVersion = (char*)pBuffer;

    if ( strVersion.find( '.' ) != std::string::npos )
    {
      dwMajor = atoi( strVersion.substr( 0, strVersion.find( '.' ) ).c_str() );
      strVersion = strVersion.substr( strVersion.find( '.' ) + 1 );
    }
    if ( strVersion.find( '.' ) != std::string::npos )
    {
      dwMinor = atoi( strVersion.substr( 0, strVersion.find( '.' ) ).c_str()  );
      strVersion = strVersion.substr( strVersion.find( '.' ) + 1 );
    }
    if ( strVersion.find( '.' ) != std::string::npos )
    {
      dwBuildNumber = atoi( strVersion.substr( 0, strVersion.find( '.' ) ).c_str()  );
      strVersion = strVersion.substr( strVersion.find( '.' ) + 1 );
  }
    if ( !strVersion.empty() )
    {
      dwSubBuild = atoi( strVersion.c_str()  );
    }
  }

  delete[] pData;

  GlobalUnlock( hGlobal );
  FreeResource( hGlobal );


  return true;

}
 
Herzlichen Dank!

Aber hat sich bereits erledigt
Hab mir klasse von CodeProjekt ausgeliehen, die das für mich macht.

mfg Frido
 

Neue Beiträge

Zurück