AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi CreateProcess - Bei GUI geht's, bei Konsole tut sich nichts
Thema durchsuchen
Ansicht
Themen-Optionen

CreateProcess - Bei GUI geht's, bei Konsole tut sich nichts

Ein Thema von internetnavigator · begonnen am 22. Okt 2010 · letzter Beitrag vom 24. Mär 2011
 
internetnavigator

Registriert seit: 13. Mai 2006
94 Beiträge
 
RAD-Studio 2010 Arc
 
#1

CreateProcess - Bei GUI geht's, bei Konsole tut sich nichts

  Alt 22. Okt 2010, 01:35
Delphi-Version: XE
Hallo
Ich habe auch mal wieder ein Problem

Ich habe in den letzten Stunden die frei verfügbare Unit RedirectConsole.pas
versucht für objektorientieren Einsatz umzuschreiben, aber auch versucht den größten Teil der Unit zu übernehmen und die Struktur zu erhalten.

Die Unit leitet Ein- und Ausgaben in/aus der Eingabeaufforderung (cmd.exe Prozess) in/aus Delphi um. Problem ist die Schleife (repeat-until) im Originalcode, die ich in der Konsole so nicht einsetzen kann/will.
Also habe ich es in eine Klasse umgeschrieben:

Delphi-Quellcode:
Type
  TSysCmd = Class
   Public
    Constructor Create(pCmdDatei, pErrorStr, pStartOrdner : String);
     Procedure SendeZeile(pZeile : String);
     Var RC_LineOut: procedure(s: string);
                hBufferWarteZeit : Integer;
    Destructor Free();
   Private
    Function IstWinNT : BOOLEAN;
    Procedure TeileZeilen(pText : String);
    const bufsize=1024; // 1KByte Buffer
    Var
      buf: array [0..bufsize-1] of AnsiChar; // Musste ich ändern von Char sonst falsche Zeichen
      si: tSTARTUPINFO;
      sd: tSECURITYDESCRIPTOR;
      pi: tPROCESSINFORMATION;
      newstdin, newstdout, read_stdout, write_stdin: tHandle;
      bread, avail: dword;

Const
  CRLF=#13#10;

Var
  RC_SendBuf: string;
  RC_End: Boolean;
  RC_ExitCode: Cardinal;

End;
Im Create erzeuge ich die Prozessinstanz (cmd.exe) und versorge sie dann in SendeZeile mit Eingabe und ließ in der selben Methode nach kurzem warten (hBufferWarteZeit=200ms) den Buffer aus und leite es über RC_LineOut an meine Konsole weiter.
Eingebunden in ein VCL Programm funktioniert das ganze auch perfekt, wenn ich das Objekt aber in einer Konsole erstelle dann wird cmd.exe garnicht erst erzeugt, weiß jemand warum?
Das Hauptprogramm ist //{$APPTYPE CONSOLE} weil ich es über lokale ressourcen steuere.

Hier noch der CreateProcess-Block:
Delphi-Quellcode:
  GetStartupInfo(si);
  si.dwFlags:=STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
  si.wShowWindow:=SW_HIDE;
  si.hStdOutput:=newstdout;
  si.hStdError:=newstdout;
  si.hStdInput:=newstdin;

  if not CreateProcess(pchar(pCmdDatei), nil, nil, nil, true,
      CREATE_NEW_CONSOLE, nil, nil {pChar(lStartOrdner)}, si, pi) then begin

    pErrorStr := 'OnCreate(SysCmd) - Fehler bei der Erstellung des Prozess "' + pCmdDatei + '"';
    CloseHandle(newstdin);
    CloseHandle(newstdout);
    CloseHandle(read_stdout);
    CloseHandle(write_stdin);
    exit;
  end;
Wäre echt nett wenn mir jemand das mal erklären könnte

Gruß !N
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz