Seite 1 von 1
Weitere EXE in eigenes Programm einbinden
Verfasst: 28.08.2013 17:05
von Amor_2001
Hallo zusammen,
ich habe folgende(s) Frage/Problem:
Ich habe ein Tool (exe), das ich aus meinen Programm heraus aufrufe. Das ist ja auch kein Problem.
Damit keiner es versehentlich löscht (benötige ich für die Ausführung meines Programms unbedingt) habe ich
es als ADS an meine EXE gehängt. Funktioniert auch einwandfrei, aber leider nur bei NTFS als Filesystem.
Sobald es auf FAT32 kopiert wird, geht der ADS leider verloren (was ja auch richtig ist).
Nun meine Frage....gibt es eine Möglichkeit den Code der Tool-EXE so in mein Programm zu integrieren, dass ich zum Schluß wieder nur eine EXE habe, die Funktionen aus dem Tool aber trotzdem aufrufen kann?
Ich hoffe, es ist einigermaßen verständlich erklärt. Falls nicht versuche ich es nochmal besser.
Danke vorab.
Re: Weitere EXE in eigenes Programm einbinden
Verfasst: 28.08.2013 17:25
von STARGÅTE
ADS (Alternativer Datenstrom) ist bei Benutzern ungern gesehen, weil solche Datei nicht sichtbar sind und u.U. rießen verstecke Müllhalden erzeugen können.
Du kannst deine EXE mit IncludeBinary in deine Haupt-EXE einbinden.
Wenn du nun feststellst, das die Neben-Exe fehlt (oder verlorengegangen ist), kannst du sie aus der Haupt-Exe kopieren und neu erstellen: CreateFile() -> WriteData() -> ?NebenExe und Längenangabe
Re: Weitere EXE in eigenes Programm einbinden
Verfasst: 28.08.2013 17:42
von ts-soft
Wer löscht den Ausversehen eine Exe? Noch nie gehört, ist für mich Bullshit!
Beim Tipp von STARGÅTE sollte beachtet werden, das normallerweise keine Schreibrechte im
Verzeichnis Deine Exe vorhanden sind, somit eine Wiederherstellung ohne Adminrechte fehlschlägt
oder die Wiederherstellung in einem Verzeichnis ausführen, wo Schreibreche vorhanden sind.
Ich rate von diesem Vorgehen ab, sowas machen eigentlich meist nur Programme, die böses
vorhaben
Wenn Dein "zweitprogramm" fehlt, den User einfach drauf aufmerksam machen, das Komponenten
zur Ausführung fehlen und er Dein Programm erneut installieren sollte! So macht es jedes Programm,
wenn z.B. eine DLL o. ä. fehlt.
Gruß
Thomas
Re: Weitere EXE in eigenes Programm einbinden
Verfasst: 28.08.2013 18:10
von 7x7
STARGÅTE hat geschrieben:...ist bei Benutzern ungern gesehen, weil solche Datei nicht sichtbar sind...
Yup! Man sieht nicht gerne Nichts

Re: Weitere EXE in eigenes Programm einbinden
Verfasst: 28.08.2013 18:15
von RSBasic
Re: Weitere EXE in eigenes Programm einbinden
Verfasst: 28.08.2013 21:35
von Amor_2001
Das mit dem IncludeBinary ist keine schlechte Idee.
Lieber wäre mir ja noch gewesen, wenn ich ohne den Code als Datei zu schreiben direkt auf die Daten hätte zugreifen können.
Aber so ist es schon ein guter Ansatz.
Vielen Dank für die Hilfe!
Re: Weitere EXE in eigenes Programm einbinden
Verfasst: 29.08.2013 23:41
von Thorium
Amor_2001 hat geschrieben:Das mit dem IncludeBinary ist keine schlechte Idee.
Lieber wäre mir ja noch gewesen, wenn ich ohne den Code als Datei zu schreiben direkt auf die Daten hätte zugreifen können.
Auf Daten zuzugreifen ist ja nicht das Problem. Den Code der .exe auszuführen ist das Problem. Es gibt dafür keine saubere Lösung. Das Problem ist das der Code auf feste Addressen zugreift. Das heisst die .exe muss an eine festgelegte Adresse im Speicher geladen werden. Typischerweise liegt dort aber schon deine .exe. Bei einer DLL besteht das gleiche Problem, allerdings verfügen DLL's über sogenannte Relocation Information. Diese beschreiben welche Instruktionen wie geändert werden müssen um die DLL an eine andere Speicheradresse laden zu können. .exen haben diese Informationen typischerweise nicht. Könnten sie theoretisch haben aber so gut wie kein Linker schreibt die in die .exe.
Die unsaubere Möglichkeit das ganze dennoch zu tun, ist es einen zweiten Prozess zu starten, egal was man da startet, typischerweise die eigene .exe nochmal. Allerdings per CreateProcess mit Suspended Flag. Der interessante Teil daran ist, das der Prozess zwar erzeugt und die .exe geladen wird, aber nicht vollständig initialisiert. So kann man die .exe wieder aus dem Prozesspeicher entladen und die gewollte .exe reinladen und den Prozess weiterlaufen lassen. Er initialisiert dann und es läuft. Das ganze ist aber wie gesagt sehr unsauber und kann zu diversen Problemen führen.