Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi EXE kopiert sich selbst... (https://www.delphipraxis.net/60043-exe-kopiert-sich-selbst.html)

cruso 2. Jan 2006 10:27


EXE kopiert sich selbst...
 
Hi!

Wie kann ich dafür sorgen, dass ein Programm seine eigene EXE in ein anderes Verzeichenis kopiert?
Vllt ein Ansatz: Es ist ja möglich die eigene EXE nach dem Beenden zu löschen; über eine Batch-Datei. Wie müsste diese Datei nun aussehen um die Anwendung zur Laufzeit oder direkt danach in ein anderes Verzeichnis zu kopieren?
Wisst ihr vllt wie ich das realisieren kann? Es muss ja nicht unbedingt über eine Batch-Datei geregelt sein.


MfG
Cruso

Nikolas 2. Jan 2006 10:36

Re: EXE kopiert sich selbst...
 
Was willst denn damit anfangen? Ich bin mir recht sicher, dass niemand gerne ein Programm auf dem Rechner hat, das sich nach Beendigung woanders hinkopiert.

cruso 2. Jan 2006 10:40

Re: EXE kopiert sich selbst...
 
Das soll z.B. eine Art konfiguration für ein Programm werden (eine Art Mini-Installer) man lädt es herunter und kopiert es auf den Desktop, öffnet es und nach dem Beenden oder während der Laufzeit oder danach wird das Programm kopiert/eingerichtet.

himitsu 2. Jan 2006 10:42

Re: EXE kopiert sich selbst...
 
Mit CopyFile die Datei kopieren - über ParamStr(0), oder Application.ExeName (ersteres is aber besser, außerdem greift letzteres eh auch nur auf ParamStr zu)

im Original:
- CopyFile(ParamStr(0), ...);
- die Kopie starten (dieser über die Parameter den Pfad der alten Datei und den Befehl zum Löschen mitgeben)
- sich selbst beenden

in der Kopie:
- beim Start das Original löschen (eventuell über 'nen Timer etwas warten)




Oder die Batchdatei entsprechend abändern:
> http://www.delphipraxis.net/internal...ct.php?t=11528

cruso 2. Jan 2006 11:10

Re: EXE kopiert sich selbst...
 
Und wie müsste nun genau eine Batch-Datei aussehen, die die EXE nach Beendigung in ein anderes Verzeichnis kopiert?

vlees91 2. Jan 2006 11:13

Re: EXE kopiert sich selbst...
 
ich dachte es muss net unbedingt über eine batch datei sein???

cruso 2. Jan 2006 11:19

Re: EXE kopiert sich selbst...
 
Ja schon, aber über eine Batch-Datei wäre es einfacher zu erweitern usw.

Zacherl 2. Jan 2006 11:28

Re: EXE kopiert sich selbst...
 
Zitat:

copy "%VERZEICHNISS DER EXE%\$DATEINAME DER EXE$" "%NEUES VERZEICHNISS DER EXE%\$NEUER DATEINAME DER EXE$"

cruso 2. Jan 2006 11:55

Re: EXE kopiert sich selbst...
 
Und wie würde das dann genau aussehen? also mit Beispielen? Ich weiß ja nicht wie ich was schreiben soll...

ManuMF 2. Jan 2006 11:57

Re: EXE kopiert sich selbst...
 
Um die Batch-Datei zu starten:

Delphi-Quellcode:
uses ShellAPI;

procedure TForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ShellExecute(Application.handle, nil, 'Kopieren.bat', nil, PChar(GetCurrentDir), SW_MINIMIZED);
end;
Gruß,
ManuMF

ichbins 2. Jan 2006 12:45

Re: EXE kopiert sich selbst...
 
Geht doch gaanz einfach:
Delphi-Quellcode:
var
  f,t:file of byte;
  buf:array[1..4096] of byte;
  copied:integer;
begin
  assignfile(f,application.exename);
  assignfile(t,NEWFILENAME);
  filemode:=0;
  reset(f);
  filemode:=2;
  rewrite(t);
  while not eof(f) do
  begin
    blockread(f,buf,4096,copied);
    blockwrite(t,buf,copied);
  end;
  closefile(f);
  closefile(t);
end;

cruso 2. Jan 2006 12:48

Re: EXE kopiert sich selbst...
 
Nein, nein...
Wie ich die Batch-Datei starte ist mir klar. Was ich mich frage ist, wie ich in dieser Datei (also der Batch-Datei) die Pfade übergebe. Also ob die $,%-Zeichen drinne sein müssen.
Oder ob das auch so gehen kann

Delphi-Quellcode:
copy "C:\\bla.exe" "D:\\bla.exe"

oder wie muss das genau aussehen? Mit ein paar Beispielen würde ich's sicherlich verstehen! :zwinker:

ichbins 2. Jan 2006 12:52

Re: EXE kopiert sich selbst...
 
Mit der Batchdatei ist das immer schwierig, da, falls z.B. ein ä im exename vorkommt, dieses übersetzt werden muss. Viel besser ist es wenn du die EXE einfach schon im Code kopierst. Natürlich kann es auch so gehen wie du es beschrieben hast:

Code:
@echo off
echo. Kopiere...
copy "c:\bla.exe" "d:\bla.exe"

cruso 2. Jan 2006 13:02

Re: EXE kopiert sich selbst...
 
Ja! Es funzt! Danke für eure Hilfe!

tommie-lie 2. Jan 2006 13:45

Re: EXE kopiert sich selbst...
 
Zitat:

Zitat von himitsu
ParamStr(0), oder Application.ExeName (ersteres is aber besser, außerdem greift letzteres eh auch nur auf ParamStr zu)

Wenn du eh schon weißt, daß TApplication.ExeName lediglich ParamStr(0) verwendet, warum faselst du dann noch irgendwas von "das eine sei besser als das andere"? Es wird ein Call gespart, das macht den Braten auch nicht fett.

himitsu 2. Jan 2006 14:29

Re: EXE kopiert sich selbst...
 
weil es dennoch einige gibt, die lieber Application.ExeName nehmen und es das halt auch gibt ... und nur weil ich selber ParamStr(0) verwende, muß ich es ja keinem aufzwingen (schließlich kann man bei ExeName wenigstens erkennen, was da gemeint ist)

tommie-lie 2. Jan 2006 14:40

Re: EXE kopiert sich selbst...
 
Zitat:

Zitat von himitsu
und nur weil ich selber ParamStr(0) verwende, muß ich es ja keinem aufzwingen

Und deshalb behauptest du, daß ParamStr(0) besser sei?

Zitat:

Zitat von himitsu
schließlich kann man bei ExeName wenigstens erkennen, was da gemeint ist

Und deshalb behauptest du, daß ParamStr(0) besser sei?

himitsu 2. Jan 2006 21:38

Re: EXE kopiert sich selbst...
 
Und du wiederholst dich.

Delphi-Quellcode:
type
  TApplication = class(TComponent)
  private
    ...
    function GetExeName: string;
    ...
  public
    ...
    property ExeName: string read GetExeName;
    ...
  end;

...

function TApplication.GetExeName: string;
begin
  Result := ParamStr(0);
end;
Was effektiver ist, sollte wohl erkennbar sein.

Es ist ja jedem selber überlassen, was er/sie nimmt.
Aber dennoch ist der Hinweis darauf, was "besser" (nach Tempo und Codegröße) ist nicht verkehrt, da dieses ja unter Umständen die Entscheidung, was letzt Endlich genommen wird, beeinflussen kann.

DGL-luke 2. Jan 2006 22:10

Re: EXE kopiert sich selbst...
 
Application.ExeName hat den Vorteil, dass der Code dann besser lesbar ist.
Paramstr(0) hat den Vorteil, dass es einen Aufruf spart.

Was einem wichtiger ist, kann sich doch dann jeder selbst aussuchen.

Muss man darauf so herumreiten? :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 Uhr.

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