Hi,
Ich versuche gerade mehrere Pipes zu mehreren Anwendungen parallel zu betreiben. Genauer starte ich ein Programm einige male und will zu jeder Instanz Pipes haben.
In der Theorie funktioniert das bei mir. Allerdings verliere ich die Verbindung zu den Pipes der 1. Anwendung wenn ich die zweite mit Pipes starte.
Habe eine Klasse, mit einer Methode namens Execute, die dieses Programm startet und Pipes zu dieser installiert. In Execute gibts dann eine While Schleife, die solange Daten bis der gestartete Prozess beendet wurde.
Ich poste mal meine Methode. Ist etwas gekürzt. Soll ja nur veranschaulichen wie ichs mache. Wenn weitere Informationen nötig sind, werde ich diese noch posten.
Delphi-Quellcode:
procedure TPipe.DoExecute;
var sui: TStartupInfo;
pi: TProcessInformation;
begin
// Pipes erstellen
// StartupInfo einstellen
CreateProcess(nil,PChar(cmdline),nil,nil,true,CREATE_DEFAULT_ERROR_MODE or PROFILE_USER or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,sui,pi);
if pi.hProcess <> 0 then
begin
while WaitForSingleObject(pi.hProcess) <> WAIT_OBJECT_0 do
begin
ReadPipeData;
Application.ProcessMessages;
if FTerminate then
TerminateProcess(pi.hProcess,Cardinal(-1));
end;
end;
end;
Das Problem ist eben, dass (scheinbar) die Schleife abbricht, bzw das DoExecute der ersten TPipe abgebrochen wird (?!) wenn eine zweite TPipe DoExecute ausführt. Ich erhalte keine Daten mehr. Die Verbindung scheint irgendwie abzubrechen. Ich aber nicht genau was geschieht. Das ist durch Debuggen nicht rauszufinden.
Muss man bei dem, was ich machen will irgendwas beachten oder mache ich sonst irgendwas falsch? Jedes TPipe(.DoExecute) für sich funktioniert wunderbar.
Es handelt sich übrigens um die plink.exe von
Putty, falls diese Information wichtig sein sollte.
Gruß
Neutral General