AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ausführung in sichtbarer Konsole und Inhalt der Konsole (Text) abfragen
Thema durchsuchen
Ansicht
Themen-Optionen

Ausführung in sichtbarer Konsole und Inhalt der Konsole (Text) abfragen

Ein Thema von Paul Schmidt · begonnen am 8. Okt 2020 · letzter Beitrag vom 9. Okt 2020
 
Paul Schmidt

Registriert seit: 7. Feb 2006
22 Beiträge
 
#6

AW: Ausführung in sichtbarer Konsole und Inhalt der Konsole (Text) abfragen

  Alt 8. Okt 2020, 15:32
@CCRDude

Das Problem ist, dass bei einem Aufruf von "push" keine Daten über die Pipe ankommen.
Also die von mir beschriebene Ausgabe, die man eigentlich in der Konsole sehen würde (der Fortschritt usw.), kommt bei einem "push" gar nicht über die Pipe an.
Bei diesen Aufruf läuft git - je nachdem wie lange der Upload dauert - im Hintergrund, ohne das ich über die Pipe irgendwelche Daten bekomme.

Bei einem "status" oder "init" oder "add" usw. kommen die Ausgaben der Konsole in der Pipe an und ich kann diese auch entsprechend mitloggen.
Aber bei einem "push" bleibt es eben komplett leer...

Hier mal der Ausschnitt, den ich verwende:
an "Callback" wird der Inhalt der Pipe übergeben. Also die jeweilige Konsolen-Ausgabe.

Delphi-Quellcode:
  saSecurity.nLength := SizeOf(TSecurityAttributes);
  saSecurity.bInheritHandle := true;
  saSecurity.lpSecurityDescriptor := nil;
  if CreatePipe(hRead, hWrite, @saSecurity, 0) then
  begin
    try
      FillChar(suiStartup, SizeOf(TStartupInfo), #0);
      suiStartup.cb := SizeOf(TStartupInfo);
      suiStartup.hStdInput := hRead;
      suiStartup.hStdOutput := hWrite;
      suiStartup.hStdError := hWrite;
      suiStartup.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
      suiStartup.wShowWindow := SW_HIDE;
      if CreateProcess(nil, PChar(ACommand + ' ' + AParameters), @saSecurity, @saSecurity, true, NORMAL_PRIORITY_CLASS, nil, nil, suiStartup, piProcess) then
        try
          repeat
            dRunning := WaitForSingleObject(piProcess.hProcess, 100);
            PeekNamedPipe(hRead, nil, 0, nil, @dAvailable, nil);
            if (dAvailable > 0) then
              repeat
                dRead := 0;
                ReadFile(hRead, pBuffer[0], CReadBuffer, dRead, nil);
                pBuffer[dRead] := #0;
                OemToCharA(pBuffer, dBuffer);

                if Assigned(CallBack) then
                begin
                  pOutput := string(dBuffer);
                  CallBack(dBuffer);
                end;
              until (dRead < CReadBuffer);
            Application.ProcessMessages;
          until (dRunning <> WAIT_TIMEOUT);

          GetExitCodeProcess(piProcess.hProcess, exitcode);
        finally
          CloseHandle(piProcess.hProcess);
          CloseHandle(piProcess.hThread);
        end;
    finally
      CloseHandle(hRead);
      CloseHandle(hWrite);
    end;
  end;
  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 08:43 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