Entwickler-Ecke

Dateizugriff - Exe Datei erstellen


G-man - Di 06.05.03 13:10
Titel: Exe Datei erstellen
Moin, moin,
kennt einer von euch vieleicht eine Möglichkeit, eine *.exe Datei aus einem Delphi- Programm heraus zu erstellen.
Im Klartext:
Wenn in meinem Programm der User auf einen Buttton klickt wird eine Exe Datei erzeugt (aber nicht eine Exe meines Programmes).
Wär`nett...

G-man


hansa - Di 06.05.03 13:27

Soweit ich weiß, erstellt Delphi aus Deinem Quellcode eine EXE. :mrgreen: Das ist der Sinn des Compilers. Wahrscheinlich willst Du was anderes wissen, aber auf die so formulierte Frage wird es nur diese Antwort geben. 8)


ase - Di 06.05.03 14:25

servus

kann man. du kannst den delphi compiler benutzen. an den übergibt du dann ne dpr und dann compiliert der dir das. zu finden im Delphi\Bin verzeichnis. mit dem teil kann man noch nen haufen andere sachen einstellen. alles über die kommandozeile. einfach mal inna dos box ohne parameter starten.


ase.


patrick - Di 06.05.03 20:37

mit einem dephi programm kannst du nicht direkt andere exe-dateien erstellen.
am besten erstellst du neben deinem hauptprogramm einen "programmrohling" der seine
daten aus einer "programmdatei" erhält.

ich hoffe du versteht was ich mein. :-(


ase - Di 06.05.03 22:14

servus

@patrick: warum denn nicht? wenn man das macht wie ich das geschrieben habe. also nochmal ganz genau:

man nehme die c:\delphi7\bin\dcc32.exe und packe sie in das selbe verzeichnis, in dem die zu compilierende dpr sich befindet. dann starte man das ganze mit dcc32.exe mein_projekt.dpr und freue sich anschließend über den erfolg. das klappt, hab ich selbst schon gemacht und zwar mit delphi 3 wenn ich mich recht erinnere.

ich glaube aber das die dcc32.exe noch einige dlls braucht die auch im bin verzeichnis liegen. einfach mit rüber kopieren.

natürlich muss dabei auch erwähnt werden das du diese dateien nicht weitergeben darfst wegen copyright.


ansonsten gibt es einen pascal parser. open source. das teil is gut. der macht auch exe dateien und ist selber in delphi geschrieben. neulich hatte ich ihn noch aber ich weiß net mehr wie das teil heißt.


ase


Alni - Mi 07.05.03 07:20

Es gibt noch eine andere Möglichkeit eine Exe aus deinem Programm heraus zu erstellen, ähnlich wie es Packprogramme für selbsextrahierende Dateien machen. Du kannst die zu erstellende Exe direkt an dein Programm anhängen. Diese kann dann dein Hauptprogramm zur Laufzeit auslesen und als neue Datei abspeichern. Anschließend kannst du noch an die neue Exe Nutzdaten anhängen, die die neu erstellte Exe, wenn du sie ausführst, quasi aus sich selbst herausliest.
Ich hoffe es war verständlich wie ich das jetzt gemeint habe. Wenn du Fragen hast wie das genau geht poste einfach hier nochmal.


Delete - Mi 07.05.03 07:52

Wie soll das bitte mit dem Delphi-Kompiler uaf fremden System gehen, wenn kein Delphi installiert ist? Da fehlen sämtliche Units.

Von der rechtlichen Seite mal abgesehen. :roll:

Die einzige Lösung hat Alni gepostet. Aber die geht nur, wenn die angehängten Dáten jedesmal das gleiche Format haben, sonst wird das nichts. Da die einkompilirte Exe ja mit den ihr angehängten Daten klar kommen muß.


ase - Mi 07.05.03 10:03

servus

mit den units das ist ein problem aber es ist lösbar. ich hatte damals das programm nur auf meinem rechner bebutzt. der dcc32.exe kann man den pfad übergeben in dem die units abgelegt sind.


ase


Udontknow - Mi 07.05.03 10:15

Hallo!

Evtl gibt es als Alternative die Möglichkeit, einen Interpreter miteinzubinden, anstelle ein Programm zu kompilieren.

Cu,
Udontknow


Alni - Mi 07.05.03 12:33

@Luckie

Du hast im Prinzip recht das die angehaengten Daten immer das gleiche Format haben muessen, aber alle Daten die von einem bestimmten Programm gelesen werden, muessen ein bestimmtes Format haben. Und man kann das Format ja ziemlich flexibel gestalten. Man kann z.B einmal ein eindimesionales Array anhaengen und das naechste mal ein zwei oder x-dimensionales Array. Es muss nur auch in den Daten stehen was genau drin ist. Genauso kann man unterschiedliche Datentypen hintereinander schreiben.
Was ich damit sagen will ist, ein Format gibt es immer egal ob man auf eine externe Datei zu greift oder auf die angehaengten Daten. Der eigentliche Nachteil besteht darin, das die neu erstellte Exe, die ihr angehaenten Daten nicht veraendern kann.

@G-Man
Schoen waere es natuerlich wenn du dich nochmal melden wuerdest und klarstellen koenntest ob du nun einen Compiler bzw. Linker schreiben, nur Quelltext uebersetzen moechtest oder eher an eine Anwendung wie selbstextrahierende Archieve gedacht hast.
Also G-Man bitte melde dich :wink:


patrick - Mi 07.05.03 16:40

luckie: du spricht mir aus der seele :D


G-man - Do 08.05.03 09:33
Titel: Klarstellung
Moin,
ich wollte eigentlich nur den Quelltext übersetzen (auf Knopfdruck).

G-man


ase - Do 08.05.03 09:40

nujo, darüber diskutiern wir ja die ganze zeit... gelle?


ase


G-man - Do 08.05.03 09:50

Ich meine, dass in der Laufenden Project.exe eine ander exe erstellt wird,
die allerdings vom User beeinflusst werden kann.

G-man


ase - Do 08.05.03 10:09

also so langsam fang ich an zu bezweifeln das ich verstehe was du machen willst.

wähle eine der folgenden varianten:

1:) du hast ne dpr, die du mit deinem projekt @ runtime compilieren willst, so dass du ne exe dabei rausbekommst.
2:) du hast dein programm am laufen und willst eine bereits fertige exe irgendwie erstellen oder irgendwo hinkopieren
3:) du willst nen anderes programm starten.


ase


G-man - Do 08.05.03 11:44

Eher die 2. Variante.
Aber die Exe soll während der Laufzeit erstellt werden.

G-man


ase - Do 08.05.03 11:52

tja dann denk ich mal kannste dir die karten legen :nixweiss:


ase


hansa - Do 08.05.03 12:26

Es gibt auch einen Kommandozeilen-Compiler. Das hat folgende Nachteile: Du mußt den Quelltext rausrücken. Das nächste ist dann, daß der Benutzer an DEINEM Quelltext rumfummeln muß, um was zu verändern. Ansonsten würde er sich andauernd dieselbe EXE erstellen. Und Borland dürfte auch was dagegen haben.


Delete - Do 08.05.03 12:30

Auch wenn Borland nichts dagegen haben sollte, nur, wie ich schon sagte, der Kompiler alleine bringt es nicht. Sämtliche Units und alles was dazu gehört müßte mitgeliefert werden.
Aber ich kann euch beruhigen, von der Idee kann er sich schon aus rein rechtlichen Gründe verabschieden.


Klabautermann - Do 08.05.03 14:57

Hallo,
ase hat folgendes geschrieben:
2:) du hast dein programm am laufen und willst eine bereits fertige exe irgendwie erstellen oder irgendwo hinkopieren

G-Man hat folgendes geschrieben:
Eher die 2. Variante.
Aber die Exe soll während der Laufzeit erstellt werden.


also noch mal langsam für mich.
Du willst eine EXE ausliefern, die dann irgendwann zur laufzeit an irgendwo eine andere EXE rausschreibt.
Ist die "neue" EXE in irgeneiner Art von den Eingaben des Benutzers Abhängig oder macht sie immer das Selbe?

Wenn sie immer das selbe macht, ist das ganze Trivial, da du die bereits Compilierte EXE lediglich als resource in deine EXE einkompiliert weden muss.
Wenn benutzereingaben berücksichtigt werden müssen, währe es eine möglichkeit diese in eine Konfigurationsdatei (welche wieder an die extrahierte EXE angehängt werden kann) rauszuschreiben und eine Ebenfalls vorher Compilierte EXE auf diese Parameter reagieren zu lassen.
Wenn der Benutzer hingegen richtig Programmieren können soll, geht das nur soweit wie diverse Script-Interpreter es dir erlauben. Auch hier müsstest du eine bereists vorher Kompilierte EXE, welche den Interpreter enthält rausschreiben und das eigentliche Script in eine Datei Schreiben aus der die Interpreter EXE liest (auch diese kann natürlich wieder mit der EXE verschmolzen werden). Aber es bietet dir "nur" die Möglichkeiten der Script-Sprache, nicht die von Delphi.
Wenn du Tatsächliche Delphi Programme übersetzen können willst, dann solltest du in verhandlungen mit Borland eintreten, wenn du große Mengen abnimmst, bekommst du sicherlich einen netten Rabatt auf die Delphi-Lizenzen, die mit deinem Programm verkaufen musst.

Gruß
Klabautermann


ase - Do 08.05.03 17:11

lol, nen Rabatt ja?


FloFri - Di 13.05.03 10:48

Um nochmal auf die Sache mit der Scriptsprache einzugehen: schau mal mit Google nach Exe-Mod. Damit kannst du ganz Easy Dateien an deine Exe dranhängen.

Dann machst du eifach folgendes:
1. Du erstellst ein Scriptprogramm, mit dem der User das Script eingeben kann.
2. Du hängst deinen Script-Interpreter an die .exe des Scriptprogramms.
3. Der User erstellt sein Script und speichert es.
4. Dein Scriptprogramm Extrahiert die Script-Interpreter.exe, benennt sie um (je nach dem, was der User eingegeben hat) und hängt das erstellt Script an die Script-Interpreter.exe
5. Der User führt die Script-Interpreter.exe aus
6. Der Interpreter extrahiert das Script wieder in eine versteckte temporäre Datei und wertet die Datei aus (und macht die aktionen, die im Script stehen)
7. Beim beenden löscht der Interpreter das temporäre Script.

Dadurch sieht es tatsächlich so aus, als würdest du eine echte .exe erstellen, das es ja nur eine Datei ist (an der das Script hängt).

Mit dieser Vorgehensweise, hast du fast unbegrenzte Möglichkeiten!

Du kannst zum beispiel den User per Script seine .exe verändern lassen (einfach das extrahierte script ändern, neu in deine Script-Interpreter.exe einlesen und die .exe neu starten)

MfG
FloFri


Klabautermann - Di 13.05.03 11:13

Hallo,
FloFri hat folgendes geschrieben:
Dann machst du eifach folgendes:

sag ich ja, aber
FloFri hat folgendes geschrieben:
6. Der Interpreter extrahiert das Script wieder in eine versteckte temporäre Datei und wertet die Datei aus (und macht die aktionen, die im Script stehen)
7. Beim beenden löscht der Interpreter das temporäre Script.

das ist nicht nötig. Eine EXE kann sich selber als Read-Only-Datei öffnen. Daher muss das Script nicht in eine Temporäre-Datei speichern. Du öffnest einfach die EXE, Setzt den Dateizeiger an die Stelle wo das Script beginnt und kannst loslegen (Diese Stelle musst du ja sowiso auch zum Extrahieren kennen).

Gruß
Klabautermann


FloFri - Di 13.05.03 15:45

wie ich schon geschrieben habe, benutze ich für sowas exe-mod, dann muss man das zwar extrahieren, hat aber den ganzen stress mit datenzeigern, etc nicht :)


ase - Di 13.05.03 16:25

normaler weise kannst du alles mögliche an die exe anhängen und sie ist trotzdem noch ausführbar. die "wirkliche länge" der exe datei steht im header. so brauch man keine exe-mod. dann kannste das so machen wie klabautermann schon 'gsagt hat.


ase