![]() |
Nach CreateProcess keine Befehle mehr annehmen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
folgendes Problem ich habe eine IRC Bot geschrieben der über ein bestimmten Befehl eine Consolenanwendung startet. Um die Consolenanwendung zu starten nutze ich RedirectConsole.pas (gefunden hier im Form) damit ich den Text der Console in einem Memo habe. Wenn ich nun per IRC die Console starte reagiet das Programm auf keine Befehle mehr. Wenn ich das selbe über einen Button mache funktioniert alle wie es soll. Warum?
Delphi-Quellcode:
so läuft alles bestens
procedure TForm1.Button3Click(Sender: TObject);
begin memo2.Clear; RC_Run(Edit4.Text+' --config '+Edit5.Text); end;
Delphi-Quellcode:
der .say wird nicht mehr ausgeführt.
if (content='!run') and (auser.nick = okuser) then
begin button3.Click; idirc1.say(auser.nick,'Prog gestartet ...'); end; Gruß Stacker |
Re: Nach CreateProcess keine Befehle mehr annehmen
Hi,
ich denke mal dass das RC_RUN einfach auf die Rückkehr aus der Konsole wartet. Dann wird das say ausgeführt, sobald du halt die Konsole wieder schließt. Wie das ganze unter .net aussieht kann ich dir nicht sagen, aber es sollte auch hier die Möglichkeit geben einen Prozess nebenläufig zu starten. Alternativ erzeugst du halt einen Thread, der sich dann um das Öffnen/Umleiten der Konsole kümmert. Gruß Der Unwissende |
Re: Nach CreateProcess keine Befehle mehr annehmen
Zitat:
|
Re: Nach CreateProcess keine Befehle mehr annehmen
Also, wenn ich das hier teste (die Variante mit dem Button), dann funktioniert das bei mir auch tadellos...
Und es ist in der Tat so, das RC_Run auf das Ende der Consolen-Anwendung wartet. Hat die denn ein Ende? Oder wartet die Anwendung z.B. auf ein "Zum beenden bitte Taste drücken" oder ähnliches? Und wie sieht RC_LineOut aus? Vielleicht schmeisst das ja etwas durcheinander... Greetz Wormid |
Re: Nach CreateProcess keine Befehle mehr annehmen
Hallo ich habe das Problem über Threads gelöst. Die Console hat keine Ende , sie läuft zu lange bis sie beendet wird.
Hier mal der Code
Delphi-Quellcode:
Danke für die Hilfe
type
TMyThread = class(TThread) exe:Tedit; command:Tedit; procedure Execute; override; procedure VCLSync; end; procedure TForm1.FormCreate(Sender: TObject); begin RC_LineOut:=mylineout; end; procedure TMyThread.Execute; begin if not Terminated then begin // Zugriff auf VCL-Elemente synchronisieren Synchronize(VCLSync); // etwas warten Sleep(10); end; end; procedure TMyThread.VCLSync; begin RC_Run(exe.Text+' --config '+command.Text); end; procedure MyLineOut(s: string); // Output procedure begin form1.memo2.lines.add(s); end; procedure TForm1.Button3Click(Sender: TObject); begin memo2.Clear; // Thread erzeugen (suspended) Th := TMyThread.Create(True); // Thread gibt sich selbst frei Th.FreeOnTerminate := True; // Progressbar zuweisen Th.exe := Edit4; Th.command := Edit5; // Thread starten Th.Resume; // Message anzeigen, Thread läuft weiter //ShowMessage('Thread Gestartet'); end; if (content='!run') and (auser.nick = okuser) then begin button3.Click; idirc1.say(auser.nick,'Prog gestartet ...'); end; if (content='!stop') and (auser.nick = okuser) then begin if not th.Terminated then th.Terminate; if not KillTask('...exe') then idirc1.say(auser.nick,'Prog nicht beendet ...'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz