Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Verzögerte Ausgabe beim Umleiten von stdout bei gpupdate.exe (https://www.delphipraxis.net/180403-verzoegerte-ausgabe-beim-umleiten-von-stdout-bei-gpupdate-exe.html)

Kyro 18. Mai 2014 01:33

Verzögerte Ausgabe beim Umleiten von stdout bei gpupdate.exe
 
Ich teste gerade das Umleiten der Bildschirmausgabe von Commandline-Tools mit dem üblichen dafür geeigneten Code mit Pipe und stdout.
Zur Zeit kommt der Code von Apollonius zum Einsatz, der sogar overlapped I/O verwendet.

Das funktioniert an sich ganz gut - es sei denn man ruft z.B.: die "gpupdate.exe" damit auf ...
Dann passiert folgendes...
gpupdate.exe startet -> beendet -> Und zum Schluss gibt es erst die Bildschirmausgabe:

Die Richtlinie wird aktualisiert...

Die Aktualisierung der Benutzerrichtlinie wurde erfolgreich abgeschlossen.
Die Aktualisierung der Computerrichtlinie wurde erfolgreich abgeschlossen.


(gpupdate.exe braucht dazu ca. 15 Sekunden)

Erwarten würde ich mir (da es auch so in der Eingabeaufforderung ausgegeben wird) ...
gpupdate.exe startet -> Gibt "Die Richtlinie wird aktualisiert..." aus -> Und gibt zum Schluss die restlichen Zeilen aus.

Für einen Vergleich kann man "ping 127.0.0.1" ausprobieren - Das klappt mit dem Code einwandfrei - hier kommt jede Zeile genau dann rein wie es in der Eingabeaufforderung passiert.

Nachtrag:
Inzwischen denke ich dass ich die Ursache dafür schon kenne -> (stdout <> console)
Wie kann man den Console Output (CON) abgreifen?

Bernhard Geyer 18. Mai 2014 07:47

AW: Verzögerte Ausgabe beim Umleiten von stdout bei gpupdate.exe
 
Wieso nimmst du nicht die eigentlich dafür vorgesehene API?
Dieser Workaround mit Umleiten stdout sollte man nur Aufgaben machen in denen es keine API-Schnittstelle gibt.

Kyro 18. Mai 2014 11:28

AW: Verzögerte Ausgabe beim Umleiten von stdout bei gpupdate.exe
 
Ich suche keinen Workaround konkret zur gpupdate.exe (Du hast recht, dafür gibt es besserer Wege)...
Das Problem gibt es auch bei anderen commandline-tools (3rd Party, zu denen es keine API gibt) und tlw. werden einige Bildschirmausgaben gar nicht an die stdout (oder stderr) umgeleitet.

Inzwischen denke ich dass ich die Ursache dafür schon kenne -> (stdout <> console)
Zur Veranschaulichung habe ich folgendes Batch-File ausgegraben:
Code:
ECHO OFF
ECHO Standard Output (stdout)
ECHO Standard Error (stderr) 1>&2
ECHO console output >CON
Bisher ist es mir nur möglich stdout und stderr abzufangen, wie komme ich nun aber an CON, dem "console output" heran?

Sir Rufo 18. Mai 2014 11:45

AW: Verzögerte Ausgabe beim Umleiten von stdout bei gpupdate.exe
 
Das Hauptproblem bei gpupdate.exe ist, dass das asynchron ausgeführt wird.

Das wurde irgendwann mal geändert, da sonst die Anmeldung zu lange dauerte.

Es gibt einen Parameter /sync , aber ob der das Gewünschte erfüllt ... ausprobieren

Kyro 18. Mai 2014 12:03

AW: Verzögerte Ausgabe beim Umleiten von stdout bei gpupdate.exe
 
Das löst das Problem nicht - weder im Bezug auf die gpupdate, noch auf die eigentliche Problematik

Sir Rufo 18. Mai 2014 12:16

AW: Verzögerte Ausgabe beim Umleiten von stdout bei gpupdate.exe
 
Zitat:

Zitat von Kyro (Beitrag 1259179)
Das löst das Problem nicht - weder im Bezug auf die gpupdate, noch auf die eigentliche Problematik

Du hast doch (wenigstens vor dem Update deines ersten Beitrags) explizit auch nach Denkanstößen gefragt und warum das passiert. :roll:

Kyro 18. Mai 2014 12:23

AW: Verzögerte Ausgabe beim Umleiten von stdout bei gpupdate.exe
 
:-) Ja, ich bin auch dankbar für Lösungsvorschläge, allerdings wusste ich ehrlich gesagt bei der Erstellung des Beitrags nicht so recht wie ich das Problem angehen soll ohne ein Beispiel (gpupdate.exe) einzubringen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 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