![]() |
Versionsinformationen von EXE-Dateien synchronisieren
Hallo,
mit einer Funktion wie der folgenden kann man ja die Versionsinformationen einer EXE oder DLL auslesen:
Delphi-Quellcode:
Weiß jemand wie die Updateresource Funktion zu verwenden ist, um eben diese Werte in einer EXE-Datei wieder zu schreiben? Ich habe ehrlich gesagt keine Ahnung, wie ich die Funktion verwenden soll, um die Versionsinformationen zu schreiben. In der MSDN wird leider nur erklärt, wie man Dialogressourcen kopiert..
function ReadVersionInfo(const Filename: string): string;
type T2Words = record case Boolean of True: (C: Cardinal); False: (Lo, Hi: Word); end; var size: Cardinal; p, vs: Pointer; MS, LS: T2Words; begin Result := ''; size := GetFileVersionInfoSize(PChar(Filename), size); if size > 0 then begin GetMem(p, size); GetFileVersionInfo(PChar(Filename), 0, size, p); VerQueryValue(p, '\', vs, size); with TVSFixedFileInfo(vs^) do begin MS.C := dwFileVersionMS; LS.C := dwFileVersionLS; Result := Format('%d.%d.%d.%d', [MS.Hi, MS.Lo, LS.Hi, LS.Lo]) end; FreeMem(p); end; end; Ich habe dazu auch das folgende Thema gefunden: ![]() Hintergrund ist folgender: Ich habe mehrere EXE-Dateien welche zum Programm gehören. Nun möchte ich die Versionsinformationen entsprechend Synchronisieren, damit mein Programm nach außen geschlossen unter der gleichen Versionsnummer und Buildnummer auftritt. Dazu wäre natürlich ein Tool recht praktisch, welche auf Knopfdruck die Versionsinfos updated. Any Ideas? Exceeder |
Re: Versionsinformationen von EXE-Dateien synchronisieren
Wenn du nur Delphi Projekte hast und kein Kommandozeilen-Tool nutzen musst, dann wäre mein
![]() ![]() |
Re: Versionsinformationen von EXE-Dateien synchronisieren
Hallo,
es ist leider auch eine DLL- und EXE-Datei dabei, welche nicht mit Delphi erzeugt werden. Der Weg funktioniert so also leider nicht mehr DDevExtensions. Ich denke aber doch, dass das ganze mit UpdateResource prinzipiell irgendwie möglich sein müsste, oder? Exceeder |
Re: Versionsinformationen von EXE-Dateien synchronisieren
Hab jetzt nicht explizit nach Delphi Implementationen gesucht, aber hier gibts ein Tutorial wie sowas in C/C++ zu lösen ist inkl. Source:
![]() |
Re: Versionsinformationen von EXE-Dateien synchronisieren
Hallo nochmal,
ich bin mittlerweile einen entscheidenden Schritt weiter:
Delphi-Quellcode:
Das ganze funktioniert auch soweit für die FileVersion, allerdings scheint die ProductVersion damit nicht geupdated zu werden. Jemand eine Idee was da noch falsch laufen könnte?
function WriteVersionInfo(const FileName: string; Major, Minor, Release, Build: Word): Boolean;
type VS_VERSIONINFO = packed record wLength: Word; wValueLength: Word; wType: Word; szKey: array[0..15] of WideChar; Padding1: Word; Value: VS_FIXEDFILEINFO; Padding2: Word; Children: Word; end; var lHLib: Cardinal; lHRes: Cardinal; lHResLoad: Cardinal; lPResLock: Pointer; lSz: Cardinal; lPVersionInfo: ^VS_VERSIONINFO; lPt: Pointer; lHResUpd: Cardinal; begin Result := False; if FileExists(FileName) then begin lHLib := LoadLibrary(PChar(FileName)); if lHLib <> 0 then begin lPt := nil; lSz := 0; try lHRes := FindResource(lHLib, MakeIntResource(1), RT_VERSION); if lHRes <> 0 then begin lHResLoad := LoadResource(lHLib, lHRes); lSz := SizeofResource(lHLib, lHRes); if lHResLoad <> 0 then begin lPResLock := LockResource(lHResLoad); GetMem(lPt, lSz); Move(lPResLock^, lPt^, lSz); end; end; finally FreeLibrary(lHLib); end; if Assigned(lPt) then try lPVersionInfo := lPt; lPVersionInfo^.Value.dwFileVersionMS := (Major shl 16) or Minor; lPVersionInfo^.Value.dwFileVersionLS := (Release shl 16) or Build; lPVersionInfo^.Value.dwProductVersionMS := lPVersionInfo^.Value.dwFileVersionMS; lPVersionInfo^.Value.dwProductVersionLS := lPVersionInfo^.Value.dwFileVersionLS; lHResUpd := BeginUpdateResource(PChar(FileName), False); if lHResUpd <> 0 then begin try Result := UpdateResource(lHResUpd, RT_VERSION, MakeIntResource(1), 0, lPt, lSz); finally EndUpdateResource(lHResUpd, not Result); end; end; finally FreeMem(lPt); end; end; end; end; Exceeder |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz