Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Warten bis die Datei da ist ..... (https://www.delphipraxis.net/18422-warten-bis-die-datei-da-ist.html)

Ricane 18. Mär 2004 12:54


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:
  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);
Das klappt alles wunderbar, es wird kein Felher ausgeworfen, aber der Befehl aus der Batch Datei wird nicht korrekt ausgeführt...

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

Dannyboy 18. Mär 2004 13:18

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:
sleep(500);
... eingebaut und dann ging's bei mir.
Mein Shellexecute musste quasi einfach auf meine .BAT Datei warten.
Versuch's mal.
Zitat:

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...
Die letzte Zeile Deiner .BAT lautet ab jetzt einfach mal ...
Code:
pause
...und dann wartet sie schön artig auf einen Tastendruck, bevor sie sich schließt.

Gruß
DANNYBOY

Ricane 18. Mär 2004 13:29

Re: Warten bis die Datei da ist .....
 
Zitat:

Zitat von Dannyboy
[...]
Die Lösung hierzu lautet geduldig sein. :wink: Ich habe einfach ein ...
Delphi-Quellcode:
sleep(500);
... eingebaut und dann ging's bei mir.
[...]

:gruebel:

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:
(*
  AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'K.TXT');
  Erase(Datei);
  AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'LAUNCH.BAT');
  Erase(Datei);
*)
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"


Beste Grüsse,

Ricane

shmia 18. Mär 2004 14:09

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:

AssignFile(Datei, ExtractFilePath(ParamStr(0)) + 'K.TXT');
Erase(Datei);
Das ist natürlich alter Quark aus der Pascalära. :warn:

Dateien löscht man so:
DeleteFile(const FileName: string); // aus Unit SysUtils

Schau mal auf www.delphipraxis.net/topic21144.html.
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