GetFileVersion

Gibt Versionsinformationen zu einer Datei aus (Anwendung, DLL, …).

Archivierter Inhalt: Dieser Quelltext ist derzeit inaktiv und möglicherweise veraltet, nicht mehr gewartet oder funktioniert nicht mehr.

Um verschiedene Versionen einer Programmdatei (Anwendung oder Bibliothek) auseinanderzuhalten, werden in diesen Dateien Versionsangaben gespeichert. Die können im Explorer auch in den Dateieigenschaften eingesehen werden. Um in einem Programm auf diese Daten zuzugreifen, gibt es im Windows-API die GetFileVersionInfo-Funktion. Der folgende Code zeigt, wie man sie verwendet, und nimmt dem C++-Programmierer einen Großteil der üblichen Schreibarbeit ab.

Hinweis zur Codequalität: Der Inhalt auf dieser Seite ist möglicherweise etwas angestaubt. Ich nutze C++ seit längerer Zeit nicht mehr, möchte aber die vorhandenen und früher einmal nützlichen Funktionen weiterhin anbieten.

Download

GetFileVersion.cpp1,4 KiBQuelltext der GetFileVersion-Funktion

Inhalt der Datei GetFileVersion.cpp:

// Gets file (application, DLL, …) version information.
//
// Dependencies: CString
//
// Web: http://unclassified.software/source/getfileversion
//
CString GetFileVersionInfo(CString strFile, CString strProperty)
{
    int rc;
    UINT nLen;
    DWORD nSize;
    DWORD dwHandle = 0;
    CString strBuffer;
    CString strValue;
    CString strBlock;
    void *lpPropertyBuffer;

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

    nSize = GetFileVersionInfoSize(strFile.GetBuffer(), &dwHandle);
    ::GetFileVersionInfo(strFile.GetBuffer(), 0, nSize, strBuffer.GetBuffer(nSize));

    // Read the list of languages and code pages.
    if (VerQueryValue(strBuffer.GetBuffer(),
                      "\\VarFileInfo\\Translation",
                      (LPVOID *) &lpTranslate,
                      &nLen))
    {
        strBlock.Format("\\StringFileInfo\\%04x%04x\\%s",
            lpTranslate->wLanguage,
            lpTranslate->wCodePage,
            strProperty);
        rc = VerQueryValue(strBuffer.GetBuffer(),
                           strBlock.GetBuffer(nSize),
                           &lpPropertyBuffer,
                           &nLen);
        if (rc != 0 && nLen > 0)
        {
            strncpy(strValue.GetBuffer(nLen + 1), (char *) lpPropertyBuffer, nLen);
            strValue.ReleaseBuffer(nLen);
        }
    }

    return strValue;
}

// Gets the version of the shell32 system library.
//
CString GetShell32Version()
{
    return GetFileVersionInfo("shell32.dll", "ProductVersion");
}

Lizenz und Nutzungsbedingungen

Diese Software ist als kompilierte Version und im Quelltext frei und uneingeschränkt verfügbar („Public Domain“). Ich gebe keine Garantie, auch nicht auf Lauffähigkeit oder Benutzbarkeit. Die Nutzung erfolgt auf eigene Gefahr, ich hafte nicht für Schäden, die durch sachgemäßen oder unsachgemäßen Gebrauch dieses Programms entstehen.

Statistische Daten

  • Erstellt am 2007-04-02.