Autor Beitrag
Grafix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 15.07.10 23:53 
Du hast bei deinem Aufruf von ShellExecute den Parameter für das Arbeitsverzeichnis nicht (oder falsch) gesetzt...
Grafix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Fr 16.07.10 00:47 
user profile iconGrafix hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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>';

  // StartupInfo initialisieren.
  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  StartupInfo.cb := SizeOf(TStartupInfo);

  // DOS-Fenster soll nicht angezeigt werden.
  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.