![]() |
Warten bis die Datei da ist .....
Moinsen,
habe ein Problem über dem ich schon etwas länger brüte... Hier erstmal der Quellcode:
Delphi-Quellcode:
Das klappt alles wunderbar, es wird kein Felher ausgeworfen, aber der Befehl aus der Batch Datei wird nicht korrekt ausgeführt...
Result := 0;
Anhang := TStringList.Create; Anhang.Add(Schluessel); Anhang.SaveToFile(ExtractFilePath(ParamStr(0)) + 'K.txt'); CopyFile(PChar(OpenDialog1.FileName), PChar(ExtractFilePath(ParamStr(0)) + 'Crypt.bmp'), False); Anhang.Clear; Anhang.Add('copy /b Crypt.BMP + /b K.txt Crypt.BMP'); Anhang.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Launch.bat'); While (FileExists(ExtractFilePath(ParamStr(0)) + 'Crypt.bmp') = False) Or (FileExists(ExtractFilePath(ParamStr(0)) + 'K.txt') = False) Or (FileExists(ExtractFilePath(ParamStr(0)) + 'Launch.bat') = False) Do Application.ProcessMessages; While Result < 32 Do Result := ShellExecute( Handle, 'open', PChar(ExtractFilePath(ParamStr(0)) + 'Launch.bat'), Nil, PChar(ExtractFilePath(ParamStr(0))), SW_Normal); AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'K.TXT'); Erase(Datei); AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'LAUNCH.BAT'); Erase(Datei); Lasse ich die letzten vier Zeilen weg und führe den Befehl "per Hand" aus dem Explorer aus, habe ich keine Probleme. Also war mein Verdacht das die Crypt.bmp noch nicht vorhanden ist, wenn er die Batch Datei ausführen will, aber laut FileExist ist sie das... (im Explorer taucht sie aber erst später auf... weiss nicht ob FileExist das richtige zurück liefert!) Was kann man da tun?! Leider kann ich auch nicht die Meldung sehen, die die Batch Datei zurück liefert, denn ich weiss nicht wie ich die dazu überreden kann nicht sofort wieder zu verschwinden... Beste Grüsse, Ricane |
Re: Warten bis die Datei da ist .....
Hallo ricane,
wie ich das hier sehe, hatte ich dieses Problem auch schon mal: Eine .BAT führte ich mittels ShellExecute aus, die .BAT Datei erstellte 'ne EXE Datei und die neue EXE wollte ich auch mittels ShellExecute ausführen. Das ging aber nicht, weil sie scheinbar noch nicht da war! Die Lösung hierzu lautet geduldig sein. :wink: Ich habe einfach ein ...
Delphi-Quellcode:
... eingebaut und dann ging's bei mir.
sleep(500);
Mein Shellexecute musste quasi einfach auf meine .BAT Datei warten. Versuch's mal. Zitat:
Code:
...und dann wartet sie schön artig auf einen Tastendruck, bevor sie sich schließt.
pause
Gruß DANNYBOY |
Re: Warten bis die Datei da ist .....
Zitat:
Also nachdem ich gemerkt habe das deine Sleep Lösung auch nicht klappt, wurde ich irgendwie misstrauisch.... Habe es jetzt gelöst, aber warum das die Lösung ist, weiss ich irgendwie auch nicht... Ich habe einfach folgende Zeilen als Kommentar gesetzt:
Delphi-Quellcode:
Aber warum ist das die Lösung?! Dieser Code wird doch viiiiiiiiiiiiiiel später ausgeführt, als der ShellExecute Befehl... würde mich mal interessieren warum, aber da meine Frage beantwortet ist, setze ich diesen Thread erstmal auf "Beantwortet"
(*
AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'K.TXT'); Erase(Datei); AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'LAUNCH.BAT'); Erase(Datei); *) Beste Grüsse, Ricane |
Re: Warten bis die Datei da ist .....
Ist dir aufgefallen, wie oft du ExtractFilePath(ParamStr(0))geschrieben hast ?
Also schnell eine Funktion draus machen:
Delphi-Quellcode:
function ApplicationPath: string;
begin Result := ExtractFilePath(ParamStr(0)); end; Zitat:
Dateien löscht man so: DeleteFile(const FileName: string); // aus Unit SysUtils Schau mal auf ![]() Dort wird gezeigt, wie man Dateien ohne Batchdatei verkettet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 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