'Andreas Mause' via ZUGFeRD schrieb:
> ... kann ich bestätigen!
Für die Nachwelt, falls das mal jemand in einer Suchmaschine findet:
Ich hatte bisher unter Windows zum Mustang-Start aus einem Programm
heraus das hier verwendet:
ShellExecuteEx('java.exe', '-jar mustang.jar --action...', ...)
aber wenn man da > bzw. 2> zur Output-Redirection ans Ende der
Parameterliste schreibt, funktioniert das nicht (daher hatte ich
bisher das Logfile ausgelesen, das ja im wesentlichen ein Spiegel-
bild von stderr war).
Um unter Windows Zugriff auf stdout und stderr zu erhalten, muss
man CreateProcess statt ShellExecuteEx verwenden, was aber wesent-
lich komplexer ist; ein vollständiges Beispiel findet man z.B. hier:
https://learn.microsoft.com/de-de/windows/win32/procthread/creating-a-child-process-with-redirected-input-and-output
Ein Forumsbeitrag auf Stackoverflow hat mir allerdings einen Tipp
gegeben, wie man das Problem lösen bzw. umgehen kann - etwas um-
ständlich, aber nicht so umständlich wie CreateProcess (und außer
stderr kriegt man so auch gleich noch stdout mit dazu):
Man erzeugt aus dem Programm heraus die nötige Befehlszeile in
einer Batchdatei, also etwa VALIDATE.BAT und schreibt da rein
java -jar mustang.jar --action validate.... > 1.txt 2> 2.txt
und *das* kann man dann mit ShelExecuteEx('VALIDATE.BAT') auf-
rufen, und *so* funktioniert auch die stdout/stderr-Redirection
(so dass man nach der Ausführung die resultierenden Dateien 1.txt
und 2.txt einfach in sein Programm einlesen - und danach wieder
löschen - kann).
Man sollte natürlich überall die vollständigen Pfade angeben,
weil man ja nie so genau weiß, in welchem Arbeitsverzeichnis
man sich gerade befindet.
Aber so grundsätzlich scheint das so zu klappen... dann kann
man Mustang auch eh immer mit --disable-file-logging aufrufen,
weil man das auf diese Art und Weise ja sowieso nicht mehr
braucht.