Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi .exe datei im Programm erstellen (https://www.delphipraxis.net/145631-exe-datei-im-programm-erstellen.html)

implementation 5. Jan 2010 16:36

Re: .exe datei im Programm erstellen
 
Zitat:

Zitat von -Phantom-
also
Delphi-Quellcode:
uses shellapi;


shellExecute(0,
        Nil,
        PChar('C:\freepascal\bin\i386-win32\ppc386.exe' ' C:\Programm.pas" -FuC:\Units' -FuC:\Units),
        Pchar('-Parameter'),
        Pchar('C:\StartDir'),
        SW_NORMAL);

Nicht ganz:
Delphi-Quellcode:
ShellExecute(0,Nil,'ppc386.exe', '"C:\Programm.pas" -FuC:\Units', 'C:\Freepascal\bin\i386-win32',SW_NORMAL);

-Phantom- 5. Jan 2010 16:57

Re: .exe datei im Programm erstellen
 
Ja nun haben wir den Compiler aufgerufen? oder nicht? ja und wo ist die .exe die entstehen soll? es geht so weit alles also wenn ich das ausführe kommt für kurze zeit so ein "CMD Fenster" aber dann passiert nichts.

implementation 5. Jan 2010 17:04

Re: .exe datei im Programm erstellen
 
C:\Programm.exe müsste danach existieren.

Mithrandir 5. Jan 2010 17:07

Re: .exe datei im Programm erstellen
 
Es sei denn, du versuchst das Ganze auf C:\ unter Vista oder Win7. Dann nicht. ;)

-Phantom- 5. Jan 2010 17:11

Re: .exe datei im Programm erstellen
 
Ja habe Vista , aber ich erstelle das nicht Direkt auf C:\ sondern im einem Ordner
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(0,Nil,'ppc386.exe', '"C:\Users\mathias\delphi programme\exe\programm.pas" -FuC:\Units', 'C:\Freepascal\bin\i386-win32',SW_NORMAL);
end;

implementation 5. Jan 2010 17:12

Re: .exe datei im Programm erstellen
 
Ich benutze auch Win7 und bei mir läuft's zumindest als Admin. Als eingeschränkter Nutzer weiß ich nicht.

-Phantom- 5. Jan 2010 17:13

Re: .exe datei im Programm erstellen
 
Ja ich bin auch Admin...

implementation 5. Jan 2010 17:26

Re: .exe datei im Programm erstellen
 
Dann versuchs einfach mal mit anderen Pfaden (Desktop etc.)

sx2008 5. Jan 2010 17:48

Re: .exe datei im Programm erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es ist möglich, dass ein Programm eine Kopie von sich selbst gezielt verändert.
Es ist zwar nicht empfehlenswert (Virenscanner schlagen Alarm,...) aber immerhin möglich.
Dazu benötigt man in den Daten ein "magisches Wort".
Beispiel:
Delphi-Quellcode:
var
  globalConfigData:Ansistring = '@magicword@'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
Dieser String ist später in der Exedatei enthalten.
Die Reihe von #0 dient als Platzhalter für die Konfigdaten.
Ein Programm lädt seine eigene Exe als String in den Speicher, verändert die Daten nach dem Magischen Wort und schreibt diese Daten unter einem neuen Dateinamen auf die Platte.

Demo im Anhang!

-Phantom- 5. Jan 2010 18:04

Re: .exe datei im Programm erstellen
 
Ich denke ich mache was Grundlegendes verkehrt.
So gehe ich vor:
Ich erstelle ein neues Formular so mache damit erst mal gar nichts speichere es auf dem Destop als Programm.pas und und Project speichere ich gar nicht ab ( Muss ich das )?
So nun ist auf dem Destop die Programm.pas soweit so gut . Ich Starte wieder Delphi und lege eine neue Unit an auf der form ist ein Button der soll das machen :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(0,Nil,'ppc386.exe', '"C:\Users\mathias\Desktop\programm.pas" -FuC:\Units', 'C:\FPC\2.4.0\bin\i386-win32',SW_NORMAL);
end;

end.
So geht auch ohne fehler Meldung durch aber es wird keine programm.exe erstellt.

implementation 5. Jan 2010 18:10

Re: .exe datei im Programm erstellen
 
Oh ja, du machst etwas grundlegendes verkehrt.
Geh erst einmal von einem ganz einfachen Konsolen-Programm aus:
Delphi-Quellcode:
program Echo;

uses crt;

var
  s: string;

begin
  ReadLn(s);
  WriteLn(s);
  Delay(2000);
end.
Auf Formularanwendungen kannst du später noch zurückkommen.
Erst einmal müssen sich solche einfachen Progs kompilieren lassen.

[EDIT]
Das war Programm.pas/Programm.dpr/Programm.lpr/Programm.pp/Programm.p oder wie auch immer du die Datei nennst.
Das aufrufende Programm kann natürlich auch eine Formularanwendung sein.

himitsu 5. Jan 2010 18:12

Re: .exe datei im Programm erstellen
 
dann versuche es mal mit dem Projekt und .dpr statt dem .pas in den Parametern

In Delphi machst duauch aus der DPR die EXE und nicht aus einzelnen PAS.

implementation 5. Jan 2010 18:14

Re: .exe datei im Programm erstellen
 
Die Dateiendung ist egal. Hauptsache es handelt sich um ein Programm und KEINE Unit.
Aus Units macht FPC bloß Objektdateien und PPU's (ähnlich wie DCU's).

-Phantom- 5. Jan 2010 18:26

Re: .exe datei im Programm erstellen
 
Geht alles nicht...
@implementation
Kannste mir mal sagen wie du vor gehst?

implementation 5. Jan 2010 18:33

Re: .exe datei im Programm erstellen
 
1. Schritt:
Du erstellst C:\Programm.pas (dafür kannst du Delphi benutzen, oder einen einfachen Texteditor oder Notepad++ oder was du willst).
Als einfache Konsolenanwendung. Ganz ohne Forms.
Mit folgendem Inhalt:
Delphi-Quellcode:
program Programm;

uses crt;

var s: string;

begin
  ReadLn(s);
  WriteLn(s);
  Delay(2000);
end.
2. Schritt:
Du erstellst ein normales Delphi-Programm.
Darin rufst du mit ShellExecute den FPC auf (Parameter: "C:\Programm.pas").

-Phantom- 5. Jan 2010 18:40

Re: .exe datei im Programm erstellen
 
Oke geht ... geht das nun auch mit Formularen? Nein!
wie mache ich das nun mit Formularen?

implementation 5. Jan 2010 18:48

Re: .exe datei im Programm erstellen
 
Wenn die Zielanwendung nun Formulare enthalten soll, dann gibt es 3 Möglichkeiten:
  • Du kannst in das Zielprogramm die LCL einbinden.
  • Du kannst dich mit Luckie's Win32API-Tutorials vertraut machen und die Zielprogramme nonVCL schreiben.
  • Du kannst dich mit Luckie's Win32API-Tutorials vertraut machen und deinen eigenen VCL-Ersatz schreiben.

[EDIT]
Theoretisch könntest du auch meine NWL benutzen, aber die befindet sich noch im Pre-Alpha-Stadium.

-Phantom- 5. Jan 2010 18:50

Re: .exe datei im Programm erstellen
 
Zitat:

Du kannst in das Zielprogramm die LCL einbinden.
Schon und gut aber wie?

implementation 5. Jan 2010 18:52

Re: .exe datei im Programm erstellen
 
1. Du besorgst dir die LCL.
2. Du bindest die Units ins Zielprogramm ein.
3. Du erstellst im Zielprogramm dynamisch die Forms.

implementation 6. Jan 2010 16:39

Re: .exe datei im Programm erstellen
 
Ich habe mal ein Testprojekt für die LCL geschrieben.
Es gibt leider ein paar Fehler beim Linken:
Code:
Free Pascal Compiler version 2.2.4 [2009/04/10] for i386
Copyright (c) 1993-2008 by Florian Klaempfl
Target OS: Win32 for i386
Compiling C:\Users\Marvin\Desktop\lcltest.pas
Linking C:\Users\Marvin\Desktop\lcltest.exe
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterCustomImageList
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterMenuItem
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterMenu
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterMainMenu
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterPopupMenu
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterDragImageList
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterControl
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterWinControl
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterGraphicControl
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterCustomControl
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterScrollingWinControl
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterScrollBox
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterCustomFrame
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterCustomForm
lcltest.pas(13,1) Error: Undefined symbol: WSRegisterHintWindow
lcltest.pas(13,1) Fatal: There were 15 errors compiling module, stopping
Fatal: Compilation aborted
Weiß jemand was darüber?
Sonst muss Phantom doch die NWL nehmen :mrgreen: *eigenwerbungmach*


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.
Seite 2 von 2     12   

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