Hi Leute!
Also ich führe meine Programme jetzt mit CreateProcess() aus und hole den Rückgabewert via GetExitCodeProcess() zurück, nachdem der Prozess beendet wurde.
(Warten bis der Prozess beendet wurde, mit WaitForSingleObject() )
Funktioniert einwandfrei! Sau cool!
ABER!!!!
Ich rufe ein Programm mit einem Timer alle 500 Millisekunden auf!
Nach einer Weile kann ich jedoch kein weiteres Programm mehr aufrufen!
Also egal welches! Ich kann keine Prozesse mehr starten!
Gut, Ich net blöd, denk natürlich darüber nach und vermute natürlich als erstes,
dass er mir die Prozesse vielleicht nicht wieder beendet und Windows irgendwann keinen weiteren Prozess mehr verwalten/starten kann.
Aber dann würde ja nach WaitForSingleObject() nix passieren oder?
Habs auch schon mit TerminateProcess probiert!
Kann es also irgendwie sein, dass Windows zwar die Prozesse beendet, aber nicht die
Konsolen-Instanzen????
Was mache ich falsch?
Danke schonmal im Voraus!
Gruß,
Seraph
Ich habe an Narses Code nichts verändert!
Habs auch mal nur mit den wesentlichen Zeilen probiert:
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: 30: 31:
| function exec(ShellCommand: String): Cardinal; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; cReturnCode: Cardinal; begin FillChar(StartupInfo,SizeOf(TStartupInfo),#0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.hStdInput := 0;
StartupInfo.wShowWindow := SW_HIDE;
CreateProcess(NIL, PChar(ShellCommand), NIL, NIL, TRUE, CREATE_NO_WINDOW, NIL, NIL, StartupInfo, ProcessInfo);
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, cReturnCode);
CloseHandle(ProcessInfo.hProcess);
exec := cReturnCode; end; |
Funzt zwar, aber immer noch das selbe Problem!
Zusatzinfo:
Wenn ich ein exec auf demselben Rechner über PHP starte, dann meint er nur soviel wie:
Could not fork bla/bla/blubb.exe