Hallo!
Vor kurzem kam (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-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| 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.
Eine genauere Erklärung zur Funktionsweise inkl. Demo habe ich hier in den FAQ geschrieben:
www.delphi-library.d...ewtopic.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:
forum.delphi-treff.d...owthread.php?t=26709
www.delphipraxis.net/post1043105.html
Schönen Gruß,
Sebastian