Versionsnummer ermitteln
-
Hallo
Ich bin noch mehr oder weniger Anfänger und versuche die Versionsnummer einer beliebigen Anwendung ermitteln. Im Forum habe ich zwar einige Beiträge dazu gefunden, jedoch bringe es nicht fertig die Nummer zu ermitteln.
Nach dem erfolgreichen anwenden der Methoden "GetFileVersionInfoSize" und "GetFileVersionInfo" kapiere ich nicht, wie ich mit "VerQueryValue" die Versionsnummer ermitteln kann
UINT uLen; DWORD nSize; char *pInfo; wchar_t *pVersion; AnsiString strText = "Version = "; AnsiString strFileName = Edit1-Text; nSize = GetFileVersionInfoSize(strFileName.c_str(), 0 ); if ( nSize ) { pInfo = new char[nSize]; GetFileVersionInfo( strFileName.c_str(), 0, nSize, pInfo ); VerQueryValue( pInfo, TEXT( "\\StringFileInfo\\040704B0\\ProductVersion" ), (void**)&pVersion, (PUINT)&uLen ); strText += pVersion; Memo1->Lines->Add(strText); }Wenn ich das richtig verstanden habe, sollte die Versionsnummer in die Variable "pVersion" geschrieben werden, der Rückgabewert lautet bei mir jedoch "\xAB48Z\b"
Ich wäre froh wenn mir jemand sagen könnte was ich falsch mache, bzw. was ich anders machen muss. Danke
Benutze übrigens den Borland C++ Builder 6
-
naja, dazu müsstest du natürlich schon die richtigen info auslesen!
// Funktion liefert einen AnsiString der Versionsnummer der übergebenen Datei AnsiString GetFileVersionString(const AnsiString &FileName) { // prüfen ob überhaupt Info da sind DWORD nSize = GetFileVersionInfoSize(FileName.c_str(), 0); AnsiString Result = ""; if (nSize) { char *pInfo = new char[nSize]; // Versionsinfo auslesen GetFileVersionInfo(FileName.c_str(), 0, nSize, pInfo); VS_FIXEDFILEINFO *FileInfo; UINT uLen; // Root-Information auslesen VerQueryValue(pInfo, "\\", (void**) &FileInfo, (PUINT) &uLen); // Speicher freigeben delete [] pInfo; // Versionsnummer bilden Result.sprintf("%d.%d.%d.%d", HIWORD(FileInfo->dwProductVersionMS), LOWORD(FileInfo->dwProductVersionMS), HIWORD(FileInfo->dwProductVersionLS), LOWORD(FileInfo->dwProductVersionLS)); } return Result; }// Version der Anwendung ermitteln AnsiString FileVersion = "Version: " + GetFileVersionString(Application->ExeName);
-
Vielen Dank
