Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Laufendes Programm sich selbst verschieben/ kopieren (https://www.delphipraxis.net/107862-laufendes-programm-sich-selbst-verschieben-kopieren.html)

Elko 3. Feb 2008 18:39


Laufendes Programm sich selbst verschieben/ kopieren
 
Hallo Leute,
ich habe ein Programm geschrieben, welches ich so ausstatten möchte, dass es sich selbst in einen anderen Ordner verschiebt. Ich habe schon viel gegooglet, aber dazu leider nix gefunden. Ich denke, das Problem liegt daran, dass es sich ja während es läuft verschieben soll.
Freue mich schon auf Eure Antworten!:thumb:
Viele Grüße, Elko

Strahlex 3. Feb 2008 18:44

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
Lass das Programm einfach eine Batch-Datei erstellen und ausführen :)

snow 3. Feb 2008 18:53

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
du könntest die I/O checks peer compilerdiriktive abstellen. Vllt gehts dann ohne fehlermeldung.

gruß snow

Elko 3. Feb 2008 22:37

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
Soll ich dazu dann CopyFile benutzen? Wenn ja, was soll ich dann als Parameter angeben?
Gruß, Elko

Hansa 3. Feb 2008 22:44

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
Er redet von einem LAUFENDEN Programm ! Sowas seltsames gabs doch letztens erst. :shock:

Elko 3. Feb 2008 22:46

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
ja, ich rede vom selbstständigen Kopieren eines laufendes Proramms in ein anderes Verzeichnis :roteyes:
gibts danicht noch n andere Möglichkeit als mit einer Batch Datei? zB. CopyFile?
:dp:

snow 3. Feb 2008 22:58

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
Delphi-Quellcode:
var filepathold : string;
filepathnew : string;
streamold : Tstream;
streamnew : Tstream;
begin
{$I-}
filepathnew:='I:\delphi\testContainer\Project1.exe';
filepathold:=ExtractFilePath(ParamStr(0))+'Project1.exe';
streamnew := TFilestream.Create(filepathnew,fmCreate);
streamold := TFilestream.Create(filepathold,fmShareDenyNone);
streamnew.CopyFrom(streamold,streamold.Size);
streamold.Free;
streamnew.Free;
{$I+}
so gehts... (wenn das projeckt Project1.exe heißt)

gruß snow

Ralf Kaiser 4. Feb 2008 07:45

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
Zitat:

Zitat von snow
Delphi-Quellcode:
filepathold:=ExtractFilePath(ParamStr(0))+'Project1.exe';
so gehts... (wenn das projeckt Project1.exe heißt)

Nein. So geht es nicht. ParamStr(0) enthält bereits den vollen Namen. Da muss "Project1.exe" nicht mehr angehängt werden!

FAlter 4. Feb 2008 08:16

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
Hi Elko,

natürlich geht es mit CopyFile. Ich hatte jedenfalls keine Probleme. Nur verschieben kannst du es nicht, dazu muss es vorher beendet werden.

Delphi-Quellcode:
var
  OldName, NewName: String;
  Overwrite: Boolean;
begin
  OldName := ParamStr(0);
  NewName := 'D:\' + ExtractFileName(OldName);
  Overwrite := false;

  CopyFile(PChar(OldName), PChar(NewName), Overwrite);
end;
Mfg
FAlter

snow 4. Feb 2008 10:31

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
Zitat:

Nein. So geht es nicht. ParamStr(0) enthält bereits den vollen Namen. Da muss "Project1.exe" nicht mehr angehängt werden!
es funkioniert aber auch so...


Zitat aus Delphi-treff
Zitat:

Ordner, in dem sich die eigene Anwendung befindet ermitteln
Delphi-Quellcode:
function GetApplicationDirectory: String;
begin
  Result := ExtractFilePath(ParamStr(0));
end;
das was du meinst ist
Delphi-Quellcode:
Application.Exename
das klappt aber nur wenn Forms eingebunden ist.

gruß snow

DeddyH 4. Feb 2008 10:41

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
Application.Exename und ParamStr(0) liefern dasselbe zurück, aber für ParamStr(0) brauchst Du die Unit Forms nicht, wie schon richtig bemerkt.

Elko 4. Feb 2008 13:22

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
Also erst mal vielen Dank für eure Antworten! :-D
Ich habe eure Varianten mal ausprobiert: Sowohl die von Snow, als auch die von FAlter funktionieren einwandfrei. (Ich finde die Variante von snow irgendwie kompliziert, OK, es könnte daran liegen, dass ich noch nie mit Streams gearbeitet habe :roll: )

Übrigens: Ich habs mal durch Ausgabe mit einem Label ausprobiert, und dabei ist rausgekommen, dass
Delphi-Quellcode:
ParamStr(0)
den gesamten Pfad mit Dateiname ausgibt.

das:
Delphi-Quellcode:
ExtractFilePath(ParamStr(0))+'Project1.exe'
kommt also auf selbe raus :coder2:

Hm, da gibts schon wieder ein Problem (diesmal mit dem Abspielen von Midi-Sequenzen (also zB. "town.mid" im Ordner "WINDOWS\Media") mit dem Delphi-Mediaplayer. Dazu mache ich aber lieber ein anderes Thema auf :coder:

Viele Grüße, Elko

Ralf Kaiser 4. Feb 2008 17:06

Re: Laufendes Programm sich selbst verschieben/ kopieren
 
Zitat:

Zitat von snow
Zitat:

Nein. So geht es nicht. ParamStr(0) enthält bereits den vollen Namen. Da muss "Project1.exe" nicht mehr angehängt werden!
es funkioniert aber auch so...

Schon. Da hatte ich mit nicht genau ausgedrückt. Es ist aber nicht besonders sinnvoll erst mit ExtractFilePath den Dateinamen abzuschneiden um ihn dann sofort wieder anzuhängen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 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