Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Versionsinformationen (VSFixedFileInfo) per Stream anfügen (https://www.delphipraxis.net/134158-versionsinformationen-vsfixedfileinfo-per-stream-anfuegen.html)

Mazel 16. Mai 2009 19:53


Versionsinformationen (VSFixedFileInfo) per Stream anfügen
 
Hallo,

ich habe schon vor langer Zeit probiert an eine *.exe Datei eine Version Resource mittels UpdateResource hinzuzufügen. Leider kam es nie zum Erfolg und somit hatte ich das Projekt auf Eis gelegt. Nun bin ich wieder darauf gestoßen und habe durch andere Beiträge gelesen dass TStream scheinbar auch dafür zum Einsatz kommen kann. Nun habe ich gesucht aber speziell für diese Resourcen scheint es noch kein Beitrag zu geben, weshalb ich hiermit Fragen möchte, wie ich diese Resource einer *.exe hizufügen kann.
Es geht darum, dass eine *.exe Datei die keine Versionsinformationen besitz, welche bekommen soll, dabei soll die Dateiversion, Produktversion, Hersteller, Copyright usw. geschrieben werden.
Dabei hatte ich folgende Variante probiert, mit der Absicht, die exe in ein Stream zu laden, diesen Stream in einen MemoryStream zu packen und dort die Versionsinformation anzufügen und am Ende eine neue Datei zu erstellen. Die Datei wird geschrieben nur leider ohne Versionsinformation. Das ist natürlich nur ein Ansatz da ich nicht weis was noch alles benötigt wird, damit die Resource am Ende richtig erkannt wird in bspw. einem ResourceHacker.
Delphi-Quellcode:
procedure WriteResource;
var
  len : word;
  vsFixedFileInfo : TVSFixedFileInfo;
  f : TFileStream;
  m : TMemoryStream;
begin
  f := TFileStream.Create(Form1.Edit1.Text, fmOpenRead);
  m := TMemoryStream.Create;
  f.Position := 0;
  m.CopyFrom(f, f.Size);
  f.Free;
  FillChar(vsFixedFileInfo, 0, sizeof(vsFixedFileInfo));
  vsFixedFileInfo.dwSignature := $FEEF04BD;
  vsFixedFileInfo.dwStrucVersion := $00010000;
  vsFixedFileInfo.dwFileVersionMS := $00010000;
  vsFixedFileInfo.dwFileVersionLS := $00000000;
  vsFixedFileInfo.dwProductVersionMS := $00010000;
  vsFixedFileInfo.dwProductVersionLS := $00000000;
  vsFixedFileInfo.dwFileFlagsMask := $3f;
  len := sizeof(vsFixedFileInfo);
  m.Write(len, sizeof(len));
  m.Write(vsFixedFileInfo, sizeof(len));
  f := TFileStream.Create(Form1.Edit1.Text + '_new', fmCreate);
  m.Position := 0;
  f.CopyFrom(m, m.Size);
  m.Free;
  f.Free;
end;
Es wär nett, wenn jemand einen Ratschlag geben könnte der mich weiter bringt in Sachen TVSFixedFileInfo, RT_VERSION und VS_VERSION_INFO über Stream neu schreiben.

Gruß
Mazel

omata 16. Mai 2009 19:57

Re: Versionsinformationen (VSFixedFileInfo) per Stream anfüg
 
Was spricht gegen Delphi->Projekt->Optionen->Versionsinfo?

Mazel 16. Mai 2009 20:00

Re: Versionsinformationen (VSFixedFileInfo) per Stream anfüg
 
Es soll für jede beliebe Datei sein, auch jene die nicht mit Delphi erstellt wurden.

Zacherl 16. Mai 2009 20:03

Re: Versionsinformationen (VSFixedFileInfo) per Stream anfüg
 
Ich kann dir da helfen .. Habe eine Klasse gebastelt, die die Versionsinformationen im Binärformat lesen und schreiben kann. Ich krame mal den Source aus und poste ihn dann hier.

Mazel 16. Mai 2009 20:06

Re: Versionsinformationen (VSFixedFileInfo) per Stream anfüg
 
Da wär natürlich eine tolle Sache. Wenn sie denn wirklich eine neue Resource sozusagen schreibt, wenn sie nocht nicht vorhanden ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz