AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Versionsinformationen von EXE-Dateien synchronisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Versionsinformationen von EXE-Dateien synchronisieren

Ein Thema von Exceeder · begonnen am 4. Mai 2009 · letzter Beitrag vom 6. Mai 2009
 
Exceeder

Registriert seit: 29. Mai 2006
24 Beiträge
 
#5

Re: Versionsinformationen von EXE-Dateien synchronisieren

  Alt 6. Mai 2009, 08:04
Hallo nochmal,

ich bin mittlerweile einen entscheidenden Schritt weiter:

Delphi-Quellcode:
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;
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?

Exceeder
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 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