Autor |
Beitrag |
Grafix
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: Do 15.07.10 23:50
Hallo,
ich möchte mit Shellexecute eine bat-Datei aufrufen, die dann ein JavaProgramm initialisiert. (Das Programm ist der WOM-Client von Minecraft). Anzumerken ist, dass die bat-Datei prüft, ob eine bestimmte Java-Datei vorhanden ist - was sie definitiv ist.
Will ich diese Bat-Datei nun mit dem shellexecute Befehl starten, gibt die batch eine Fehlermeldung, dass eben diese Datei nicht vorhanden sei. Starte ich sie direkt mit Doppelklick, funktioniert alles so wies soll... Woran kann das liegen? Der Fehler wird doch wohl bei meiner Programmierung liegen, nicht an der Batch oder?
Danke für alle Hinweise
Lg
Grafix
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 15.07.10 23:53
Du hast bei deinem Aufruf von ShellExecute den Parameter für das Arbeitsverzeichnis nicht (oder falsch) gesetzt...
|
|
Grafix 
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: Fr 16.07.10 00:04
Ahh danke, daran lag's.
So nebenbei, nach welchem Stichwort muss ich suchen, wenn mein Delphiprogramm überwachen und reagieren soll, wenn das aufgerufene Programm wieder geschlossen wird?
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Fr 16.07.10 00:47
Grafix hat folgendes geschrieben : | So nebenbei, nach welchem Stichwort muss ich suchen, wenn mein Delphiprogramm überwachen und reagieren soll, wenn das aufgerufene Programm wieder geschlossen wird? |
Wenn mit dem aufgerufenen Programm die Batchdatei gemeint ist, sollte es vom Prinzip wie folgt gehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| var Befehl : String; StartupInfo : TStartupInfo; ProcessInfo : TProcessInformation; begin Befehl := 'cmd.exe /c <Batchdateiname>';
FillChar(StartupInfo, SizeOf(TStartupInfo), 0); StartupInfo.cb := SizeOf(TStartupInfo);
StartupInfo.dwFlags := StartF_UseShowWindow; StartupInfo.wShowWindow := SW_Hide;
if CreateProcess(nil, PChar(Befehl), nil, nil, false, 0, nil, 'c:\', StartupInfo, ProcessInfo) then begin WaitForSingleObject(ProcessInfo.hProcess, Infinite); CloseHandle(ProcessInfo.hProcess); end; |
Wichtig ist, daß cmd.exe mit dem Parameter /c aufgerufen wird, damit sich die Eingabeaufforderung nach dem Beenden des Batchprogrammes von alleine wieder schließt.
|
|
|