![]() |
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 |
Re: Laufendes Programm sich selbst verschieben/ kopieren
Lass das Programm einfach eine Batch-Datei erstellen und ausführen :)
|
Re: Laufendes Programm sich selbst verschieben/ kopieren
du könntest die I/O checks peer compilerdiriktive abstellen. Vllt gehts dann ohne fehlermeldung.
gruß snow |
Re: Laufendes Programm sich selbst verschieben/ kopieren
Soll ich dazu dann CopyFile benutzen? Wenn ja, was soll ich dann als Parameter angeben?
Gruß, Elko |
Re: Laufendes Programm sich selbst verschieben/ kopieren
Er redet von einem LAUFENDEN Programm ! Sowas seltsames gabs doch letztens erst. :shock:
|
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: |
Re: Laufendes Programm sich selbst verschieben/ kopieren
Delphi-Quellcode:
so gehts... (wenn das projeckt Project1.exe heißt)
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+} gruß snow |
Re: Laufendes Programm sich selbst verschieben/ kopieren
Zitat:
|
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:
Mfg
var
OldName, NewName: String; Overwrite: Boolean; begin OldName := ParamStr(0); NewName := 'D:\' + ExtractFileName(OldName); Overwrite := false; CopyFile(PChar(OldName), PChar(NewName), Overwrite); end; FAlter |
Re: Laufendes Programm sich selbst verschieben/ kopieren
Zitat:
Zitat aus Delphi-treff Zitat:
Delphi-Quellcode:
das was du meinst ist
function GetApplicationDirectory: String;
begin Result := ExtractFilePath(ParamStr(0)); end;
Delphi-Quellcode:
das klappt aber nur wenn Forms eingebunden ist.
Application.Exename
gruß snow |
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.
|
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:
den gesamten Pfad mit Dateiname ausgibt.
ParamStr(0)
das:
Delphi-Quellcode:
kommt also auf selbe raus :coder2:
ExtractFilePath(ParamStr(0))+'Project1.exe'
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 |
Re: Laufendes Programm sich selbst verschieben/ kopieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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