Hallo!
Vor einer Weile kam im
DF (wieder einmal) die Frage wie man Daten an die eigene laufende Exe anhängen kann. Direkt eine laufende Exe manipulieren kann man ja nicht, aber man braucht auch kein zweites Programm dazu. Zunächst hatte ich in dem entsprechenden Beitrag eine schnelle Lösung gepostet, habe mir aber auch überlegt, wie man das vereinfachen kann.
Da bin ich schnell auf die Idee gekommen einfach eine eigene Streamklasse zu benutzen. Man kann diese Klasse jetzt einfach wie andere Nachfahren von TStream (TFileStream, TMemoryStream, ...) benutzen. Um Strings zu lesen und schreiben gibt es zusätzlich ReadString und WriteString.
Delphi-Quellcode:
var
FileContents: TExeDataStream;
begin
FileContents := TExeDataStream.Create();
try
FileContents.WriteString(Memo1.Text);
finally
FileContents.Free;
end;
Mit Free wird automatisch die alte Exe ersetzt und beendet, die neu erstellte gestartet und die alte gelöscht.
Dies ist noch nicht die Ideallösung, ich mache mir gerade Gedanken um eine saubere Lösung, auch im Hinblick auf nötige Administratorrechte, die ich im Moment noch nicht berücksichtige. Dafür habe ich eine mehrstufige, aber integrierte, Lösung im Kopf, die ich noch ergänzen werde.
Die
Unit liegt im Anhang. Eine genauere Erklärung zur Funktionsweise habe ich hier in den FAQ gepostet:
http://www.delphi-library.de/viewtopic.php?p=545198
Getestet mit:
- Delphi 7
- Delphi 2006
- Delphi 2007
- Delphi 10.4 Community Edition
Bekannte Probleme:
- Das Programm braucht derzeit direkt Administratorrechte, wenn diese für das Schreiben in das eigene Verzeichnis nötig sind. Eine saubere Lösung, die diese (ggf. per UAC) anfordert, ist in Arbeit.
- Delphi 2009 kompiliert jetzt zwar, es gibt aber einen Laufzeitfehler
Ebenfalls gepostet hier:
http://www.delphi-forum.de/viewtopic.php?t=89659
http://forum.delphi-treff.de/showthread.php?t=26709
Schönen Gruß,
Sebastian