Einzelnen Beitrag anzeigen

Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#1

Versionsinformationen (VSFixedFileInfo) per Stream anfügen

  Alt 16. Mai 2009, 19:53
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
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat