Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi .exe anhängen ?! (https://www.delphipraxis.net/113616-exe-anhaengen.html)

k4ni 11. Mai 2008 13:46


.exe anhängen ?!
 
Hallo,

Ich will eine .exe als ressource-datei an mein delphi-programm anhängen.
Hier meine .RC datei:
Code:
1 RC_DATA "MS.exe"
Wie ich sie einbinde
Delphi-Quellcode:
{$R MS.RES}
Und so will ich sie ausführen:
Delphi-Quellcode:
ShellExecute(Application.Handle, nil, PChar(1), nil, nil, Sw_show);
Aber ich bekomm ne address-vilation. Wieso?

Die Muhkuh 11. Mai 2008 13:48

Re: .exe anhängen ?!
 
Hi,

such mal nach Deinem Topic hier im Forum, das wurde schon mal besprochen :Zwinker:

k4ni 11. Mai 2008 13:54

Re: .exe anhängen ?!
 
Zitat:

Zitat von Die Muhkuh
Hi,

such mal nach Deinem Topic hier im Forum, das wurde schon mal besprochen :Zwinker:

Hmm? Ich hab das noch gar nie versucht :/
Und ich hab schon gesucht. Ich hab nur Tutorials gefunden mit dem man WAVE/BITMAP dateien anhängen kann.
Ich denke es hat was mit meiner .RC datei zu tun, weiß aber nicht was :/

Die Muhkuh 11. Mai 2008 14:02

Re: .exe anhängen ?!
 
Du musst imho die Resource erst extrahieren, bevor Du sie starten kannst.

lbccaleb 11. Mai 2008 14:12

Re: .exe anhängen ?!
 
machs wie hier mit der mp3 beschrieben ist, nur am ende natürlich nicht abspielen, sonder die exe von der platte aus starten!!

resourcen

k4ni 11. Mai 2008 14:17

Re: .exe anhängen ?!
 
Okay danke.
Habs jetzt so hinbekommen:
Delphi-Quellcode:
  ResStream := TResourceStream.CreateFromID(HInstance, 1, 'RC_DATA');
  ResStream.SaveToFile('ms.exe');
  ResStream.Free;
Gibts auch einen weg das mit ShellExecute oder CreateProcess zu starten ohne zu speichern?

Carlo91 11. Mai 2008 14:28

Re: .exe anhängen ?!
 
Hi,
nein mit ShellExecute oder CreateProcess gibt es keine möglichkeit. Ansonsten wäre es nur möglich eine EXE-datei im speicher auszuführen wenn du es schaffst sie an die richtige ImageBase zuschreiben und dann den EntryPoint callen aber sowas hab ich noch nie gemacht also kann ich dir da nur sagen wie es in der Theori geht(DLL-datei kann man leichter im speicher ausführen da diese nicht an eine ImageBase gebunden sind).

P.S. wenn ich jetzt scheiße erzählt habe bitte korrigiert mich...

P.P.S warum willst du das überhaupt machen :?:

MfG Carlo

Luckie 11. Mai 2008 15:07

Re: .exe anhängen ?!
 
Ja es git eine Möglichkeit baer das ist mehr ein hack, als eine saubere Lösung.

Carlo91 11. Mai 2008 16:10

Re: .exe anhängen ?!
 
Hi,
ich habe grade ein paar tests gemacht:

1. Es geht nur mit EXE-datein die eine "außergewöhnliche" ImageBase haben da 1. dein Programm ja auch irgendwo ist 2. auf einer standard ImageBase($00400000) kein speicher reserviert werden kann und VirtualAlloc reserviert somit die "nächst mögliche" adresse(aber um ein programm auszuführen muss es an der "richtigen" adresse sein da sonst die calls und jmps im programm "falsch" sind) und GetLastError gibt "Es wurde versucht, auf eine unzulässige Adresse zuzugreifen" bei einer standard ImageBase oder wenn dein Programm an dieser adresse ist aus.

2. Und dann ist mir noch was aufgefallen undzwar das mein Test Programm was ich im speicher ausgeführt habe kein Programm Icon hatte also kann das im speicher ausgeführte Programm wohl nicht komplett auf die eigenen Resourcen zugreifen obwohl das auch nicht sein kann da es ein VCL Programm war und somit musste es ja auch die DFM aus den ressourcen auslesen

3. Und wie auch schon punkt 2 eigendlich sagt kann es zu einem unerwarteten verhalten des ausgeführten Programmes kommen :!:

4. Und es ist unsauber wie Luckie schon sagte :!:

MfG Carlo

Luckie 12. Mai 2008 10:00

Re: .exe anhängen ?!
 
Zitat:

Zitat von Carlo91
Hi,
ich habe grade ein paar tests gemacht:

1. Es geht nur mit EXE-datein die eine "außergewöhnliche" ImageBase haben da

Soweit ich weiß, ist das nicht nötig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz