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.
Weitere EXE in eigenes Programm einbinden
Re: Weitere EXE in eigenes Programm einbinden
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
Du kannst deine EXE mit IncludeBinary in deine Haupt-EXE einbinden.
Code: Alles auswählen
NebenExe:
IncludeBinary ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Weitere EXE in eigenes Programm einbinden
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
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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Weitere EXE in eigenes Programm einbinden
Yup! Man sieht nicht gerne NichtsSTARGÅTE hat geschrieben:...ist bei Benutzern ungern gesehen, weil solche Datei nicht sichtbar sind...

- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
- unkommentierter Quellcode = unqualifizierter Müll
Re: Weitere EXE in eigenes Programm einbinden
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!
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
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.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.
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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
