Autor Beitrag
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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

ausblenden volle Höhe Delphi-Quelltext
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); 
    // seek to end of File 
    // ans Ende der Datei Seeken 
    aStream.Seek(0, soFromEnd); 
    // copy data from MemoryStream 
    // Daten vom MemoryStream kopieren 
    aStream.CopyFrom(MemoryStream, 0); 
    // save Stream-Size 
    // die Streamgröße speichern 
    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); 
    // seek to position where Stream-Size is saved 
    // zur Position seeken wo Streamgröße gespeichert 
    aStream.Seek(-SizeOf(Integer), soFromEnd); 
    aStream.Read(iSize, SizeOf(iSize)); 
    if iSize > aStream.Size then 
    begin 
      aStream.Free; 
      Exit; 
    end; 
    // seek to position where data is saved 
    // zur Position seeken an der die Daten abgelegt sind 
    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... :lol:

Ich denke das sollte die Frage beantworten... :wink:

S.J.
maximus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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 :wink:

danke sowiet.

mfg.

_________________
mfg.
mâximôv
B@rndH
Hält's aus hier
Beiträge: 9

Win98SE
D5 Prof
BeitragVerfasst: Do 08.04.04 11:26 
Motzi hat folgendes geschrieben:
www.x-spy.net/personal
Link ist leider tot. :roll: Hätt ich mir gern mal angesehen!

Gruss
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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
BeitragVerfasst: 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