Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exe mit "meinen" Programm erstellen (https://www.delphipraxis.net/84900-exe-mit-meinen-programm-erstellen.html)

xZise 23. Jan 2007 13:54


Exe mit "meinen" Programm erstellen
 
Ich würde gerne ein Programm (.exe) erstellen, welche ein paar Sachen kopiert.
Nun möchte, ich dass mein Programm ein Programm erstellt, welches diese Funktionen ausführt. Dabei ändern sich aber die Dateien die Kopiert werden sollen...

(Man isses schwierig zu erklären ^^)

Ich mach mal ein beispiel:
Es gibt ein Programm Z, welche eine Datei nach A kopiert. Diese Datei ist irgendwie in dem Programm (= eine Datei).
Und nun habe ein anderes Programm Y, mit dem man das Programm Z erstellen kann, und die Datei hinzugefügt wird.

Wie und ist das überhaupt zu realisieren?

Luckie 23. Jan 2007 14:10

Re: Exe mit "meinen" Programm erstellen
 
Du hast zwei Programme: Ein Stub-Programm und ein Builder-Programm. Der Builder hängt einfach die zu kopierende Datei an den Stub dran. Wenn der Stub gestartet wird, guckt er was an ihm an gehangen wurde und kopiert es. Siehe dazu meine SFX-Tools: http://www.michael-puff.de/dirindex....phi/Programme/

Ist aber noch nicht ganz ausgereift, sollte aber zur Anschauung ausreichen. Wenn du mit der VCL arbeitetst, kannst du natürlich auch mit Streams arbeiten, um die Dateien anzuhängen und zu extrahieren. Un dich meinem, ich hätte zu dem Thema schon mal was auf www.dsdt.info gelesen.

RainerO 23. Jan 2007 14:14

Re: Exe mit "meinen" Programm erstellen
 
Hi,

wenn ich das richtig verstehe, fallen mir 2 Lösungswege ein:
A- Du bindest die zu "kopierenden" Dateien als Resource in Dein Programm Z ein und beim starten extrahiert Z diese
Programm Y muss dann die Dateien in Resourcen wandeln und Z kompilieren
B- oder Du erzeugst eine INI-Datei, in der die Dateien stehen. Dann muss Z die INI lesen und die Dateien entsprechend kopieren,
Y muss "nur" die Ini erzeugen

bei Lösung A muss nur Programm Z distributiert werden, Bei Lösung B die ini (Wenn die Dateien im Zugriff sind, Zb im Netz, oder Z per FTP auf einen Web-Server zugreifen kann, auf dem die Dateien liegen).

ciao rainer

xZise 23. Jan 2007 14:19

Re: Exe mit "meinen" Programm erstellen
 
@ Luckie: Guck ich mir mal an...
@ Rainer: Zu Punkt B: Ich würde das in einer Datei haben. Sozusagen ein Installer.

[edit] @ Luckie: Gibt es eine Möglichkeit die Stubdatei in der Builderdatei zu haben?

RainerO 23. Jan 2007 14:32

Re: Exe mit "meinen" Programm erstellen
 
Da fällt mir noch eine Möglichkeit ein - mach doch einen Installer (zB mit Inno-Setup) - dann ist die erzeugte Setup.Exe Dein Z und Inno mit Deinem Skript Dein Y. Im Inno kannst Du mit Pascal-Skripts und Präprozessor sehr variabel das Ergebniss bestimmen

ciao

SirThornberry 23. Jan 2007 14:42

Re: Exe mit "meinen" Programm erstellen
 
Er kann auch einfach sich ein eigenes Format überlegen für seine Daten und Informationen und diese als Ressource einbinden. Mit UpdateRessource kann er dann die Ressource ändern.

RainerO 23. Jan 2007 14:47

Re: Exe mit "meinen" Programm erstellen
 
:lol: sag ich doch - Lösung A

SirThornberry 23. Jan 2007 14:50

Re: Exe mit "meinen" Programm erstellen
 
bei deiner Variante A ist von kompilieren die Rede was gar nicht der Fall sein muss. Kompilieren hätte ja den Nachteil das er einen Compiler braucht. Kann aber auch sein ich hab deine Lösung A nicht ganz verstanden.

xZise 23. Jan 2007 15:10

Re: Exe mit "meinen" Programm erstellen
 
Also:
@ Luckie: Sieht ziemlich komplex aus...
@ Rainer: Also ich denke es ist etwas übertrieben mit InoSetup rumzumachen.
@ Sir: Geht das nur mit .res-Dateien oder könnte ich reintheoretisch jede Ressource einbinden.

@ all: Vielleicht werde ich es so machen, dass es einfach ein Installer gibt, welcher eine Datei einliest. Aber das heißt ja nicht, dass ich nie diese Lösung anwende.

Ehrlich gesagt möchte ich nur eine Datei sozusagen als Archiv anhängen. Komprimiert etc. muss nicht sein.
Luckies geht in die Richtung, aber die WinAPI da drinne ist ein bisschen verwirrend :D

Luckie 23. Jan 2007 15:11

Re: Exe mit "meinen" Programm erstellen
 
Zitat:

Zitat von xZise
Luckies geht in die Richtung, aber die WinAPI da drinne ist ein bisschen verwirrend :D

Ich zähle das noch zu meinen Jugendsünden. ;)

xZise 23. Jan 2007 15:14

Re: Exe mit "meinen" Programm erstellen
 
Also inzwischen bin ich (glaub ich) durchgestiegen ...
Und jetzt wollte ich das nur für eine Datei machen...

Dann müsste ich doch rein theoretisch "nur" AttacheFile aufrufen (PS: Attache :D)?

RainerO 23. Jan 2007 15:17

Re: Exe mit "meinen" Programm erstellen
 
Vielleicht hab ich es auch nicht verstanden (oder mache es umständlich)- eine Resource muss doch in die Exe eingebunden werden, ich mach das mit
einer rc.datei
Delphi-Quellcode:
UPDATEFILE EXEFILE UpdateRPW.exe
UPDATEURS EXEFILE UpDateRPW.URS
UPDATERLWURS EXEFILE org\UpDateRLW1.URS
ORGUPDATEURS EXEFILE org\UpDate.URS
ORGLangIni INIFILE org\UpDatelang.ini
LICENCEFILE TXTFILE Lizenz.txt
LISTFILE EXEFILE PSLIST.EXE
KILLFILE EXEFILE PSKILL.EXE
und dann mit
Delphi-Quellcode:
brcc32 updaterpw.rc
daraus eine res Datei.
Die wird mit {$R UpDateRPW.RES} in das prog eingebunden.
Danach wird die Exe kompiliert, in der Exe wird mit der Funktion
Delphi-Quellcode:
function ExtractRes(ResType, ResName, ResNewName: string): Boolean;
var
  Res: TResourceStream;
begin
  Result := False;
  Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType));
  try
    Res.SavetoFile(ResNewName);
    Result := True;
  finally
    Res.Free;
  end;
end;
zB.
Delphi-Quellcode:
   ExtractRes('TXTFILE', 'LICENCEFILE', RPXL.ExePath+'Lizenz.txt');
der Inhalt gespeichert.
Für Lösung A hatte ich an so etwas gedacht, wobei Programm Y die RC Datei erzeugt, dann die Res Datei und schliesslich Programm Z
compiliert (mit dem Delphi-Compiler), um die neue Resorce einzubinden.

SirThornberry 23. Jan 2007 15:20

Re: Exe mit "meinen" Programm erstellen
 
Die Ressource muss ja zum Zeitpunkt des Compilierens noch gar nicht im Programm (A->Installer) sein sondern wird mit den Api-Ressourcen-Funktionen erst später in die compilierte Exe hinzugefügt. Und Programm B (Builder) fügt eben diese Ressource in Programm A (Installer) ein.

xZise 23. Jan 2007 15:21

Re: Exe mit "meinen" Programm erstellen
 
Da gibts ein Problem:
Zitat:

Zitat von SirThornberry
Kompilieren hätte ja den Nachteil das er einen Compiler braucht.

[edit]OOPs... Zu langsam ^^[/OOPs]

RainerO 23. Jan 2007 15:28

Re: Exe mit "meinen" Programm erstellen
 
Aha - dann mach ich es umständlich.
@SirThornberry Kannst Du mir über die Api-Funktionen noch etwas näheres sagen oder finde ich das im Forum?
Danke schon mal

MrKnogge 23. Jan 2007 18:27

Re: Exe mit "meinen" Programm erstellen
 
Die ist doch schon oben gefallen "UpdateRessource".

Gruß

RainerO 24. Jan 2007 08:16

Re: Exe mit "meinen" Programm erstellen
 
Ok, danke - damit komme ich wohl klar. :lol:

Luckie 24. Jan 2007 09:11

Re: Exe mit "meinen" Programm erstellen
 
wobei die Lösung mit der Ressource wahrscheinlich die schwierigste und, meiner Meinung nach, auch die umständlichere ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.

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