| Autor |
Beitrag |
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: So 09.11.03 22:25
hi.
Kann ich irgendwie eine resource, in der laufenden exe, speichern? ...ich weiss das sind 'MemoryMappedFiles' die das verhindern...oder so. Aber vielleicht habt ihr eine idee?
mfg.
_________________ mfg.
mâximôv
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 10.11.03 12:21
Titel: So geht es:
Hallo!
Folgendes habe ich beim SwissDelphiCenter.ch gefunden:
Original-URL:
www.swissdelphicente.../showcode.php?id=815
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78:
| function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; var aStream: TFileStream; iSize: Integer; begin Result := False; if not FileExists(AFileName) then Exit; try aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite); MemoryStream.Seek(0, soFromBeginning); aStream.Seek(0, soFromEnd); aStream.CopyFrom(MemoryStream, 0); iSize := MemoryStream.Size + SizeOf(Integer); aStream.Write(iSize, SizeOf(iSize)); finally aStream.Free; end; Result := True; end;
function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; var aStream: TFileStream; iSize: Integer; begin Result := False; if not FileExists(AFileName) then Exit;
try aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); aStream.Seek(-SizeOf(Integer), soFromEnd); aStream.Read(iSize, SizeOf(iSize)); if iSize > aStream.Size then begin aStream.Free; Exit; end; aStream.Seek(-iSize, soFromEnd); MemoryStream.SetSize(iSize - SizeOf(Integer)); MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize)); MemoryStream.Seek(0, soFromBeginning); finally aStream.Free; end; Result := True; end;
procedure TForm1.SaveClick(Sender: TObject); var aStream: TMemoryStream; begin aStream := TMemoryStream.Create; Memo1.Lines.SaveToStream(aStream); AttachToFile('Test.exe', aStream); aStream.Free; end;
procedure TForm1.LoadClick(Sender: TObject); var aStream: TMemoryStream; begin aStream := TMemoryStream.Create; LoadFromFile('Test.exe', aStream); Memo1.Lines.LoadFromStream(aStream); aStream.Free; end; |
Dazu gab es noch folgenden Hinweis:
| Zitat: |
Es kann nicht überprüft werden ob zusätzliche Daten in der Datei
vorhanden sind. Um das zu erreichen müsste man eine Checksumme des MemoryStreams
erzeugen und ebenfalls anhängen.
|
Na ja, und wenn mehrere Daten angehängt werden sollen, kann ja auch einfach eine Integer-Zahl am Ende deren Anzahl angeben und danach eine entsprechende Anzahl von Integers die jeweilige Größe angeben.
Falls gewünscht, kann ich den Quelltext auch entsprechend ändern, aber ich denke, dass das einfach genug ist...
Ich denke das sollte die Frage beantworten...
S.J.
|
|
maximus 
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Mo 10.11.03 12:47
Dir ist schon klar, dass eine exe zur laufzeit schreibgeschützt ist, oder?
trotzdem danke für die mühe.
PS: Davon abgesehen speicherst du nicht in den resourcen...damit ist leider kein teil meiner frage beantwortet.
Mir würde ja schon reichen, wenn mir jemand glaubhaft darlegt, das es absolut unmöglich ist, oder es kompliziert triks gibt.
_________________ mfg.
mâximôv
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 10.11.03 12:58
Auf die laufende Exe kannst du nicht schreibend zugreifen, du kannst höchstens über ein paar Tricks einen Dummy-Prozess erzeugen dessen Exe-Image nur im Speicher existiert, also nicht von der Festplatte in den Speicher gemappt wird (funktioniert nur unter NT), ist aber meiner Meinung nach für diesen Zweck viel zu kompliziert und vollkommen unnötig!
@jaenicke: dieser Tipp stammt von mir  Für besseres Handling von Daten die an eine Exe angehängt werden sollen hab ich jedoch eine eigene Kompnente TExtraResManager geschrieben die man hier runterladen kann: www.x-spy.net/personal 
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
maximus 
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Mo 10.11.03 13:13
Unnötig ist eine frage der definition! ...aber der aufwand ist wohl zu hoch. Also lass ich es, auch in hinblick auf viren scanner, die meine änderungen an der exe wohl nicht mögen würden
danke sowiet.
mfg.
_________________ mfg.
mâximôv
|
|
B@rndH
Hält's aus hier
Beiträge: 9
Win98SE
D5 Prof
|
Verfasst: Do 08.04.04 11:26
Link ist leider tot.  Hätt ich mir gern mal angesehen!
Gruss
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Do 08.04.04 19:50
Bei mir nicht, ich komme da auf eine Seite, die mir sagt, daß die private Seite umgezogen ist und ich unter www.manuel-poeter.de/ nachschauen soll.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
B@rndH
Hält's aus hier
Beiträge: 9
Win98SE
D5 Prof
|
Verfasst: Fr 09.04.04 09:04
Danke für den Hinweis und Weiterleitung. Liegt sicher an mir und wohl meinem alten Netscape, dass das nicht gefunzt hat. Jedenfalls noch mal danke!
Gruss
Bernd
|
|