Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - ShellExecute Rückgabeparameter/Return
Seraph - Do 10.04.08 14:13
Titel: ShellExecute Rückgabeparameter/Return
Hey ihr Freakse!
Ich wollt mal 'ne Frage bezüglich des fragwürdigen ShellExecutes.
Also entweder ich benutze die falsche Funktion oder ich bin zu blede was Anständiges im Internet zu finden:
Folgende Situation:
Ich habe einen Pool aus Programmen, die alle eine bestimmte Aufgabe erfüllen und
verschiedene Übergabeparameter weiterverarbeiten.
Die Programme sind Konsolen-Applikationen und ich rufe sie über ShellExecute auf:
ShellExecute(Application.Handle, 'open', '.\pool\Programm.exe', '-r 0', nil, SW_HIDE);
Schön und gut!
Aber kann ich mit ShellExecute auch herausfinden, was das Konsolenprogramm
für einen Rückgabewert hat?
Eines dieser Programme liest Beispielsweise den Status eines Gerätes aus und gibt diesen als Zahl zurück!
Bitte um schnelle Hilfe!
Der Karren brennt!
Seraph - Fr 11.04.08 09:24
Push
Seraph - Fr 11.04.08 10:07
Titel: DAAAAANKKEEEE!
Hey Cool! :D
Danke Martin! :dance:
Zitat: |
@Narses:
Bei Gelegenheit werde ich dir einen Tempel bauen! |
Gruß an Alle,
Seraph
Seraph - Mi 16.04.08 14:27
Titel: Kann keine weiteren Prozess-Instanzen Forken
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:
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: 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
AHT - Mi 16.04.08 14:58
Mal eine ganz dummme Frage: Wo wartest du dort auf ein Prozessende?
Seraph - Mi 16.04.08 15:17
In Zeile 24. Oder etwa nicht?
Seraph - Do 17.04.08 18:22
Hat das noch nie jemand so gehört/gesehen?
Oder ist vielleicht mein WINDOOF im A*R*S*C*H ?
Martok - Do 17.04.08 20:43
Der Code stimmt schon, aber so schnell Prozesse zu forken, das klappt unter Windoof nicht.
Wäre es nicht einfacher, dass Gerät selber abzufragen?
@Prozesse nicht mehr starten können: sieht wie
AHT's Spezialgebiet aus ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!