Entwickler-Ecke

Sonstiges (.NET) - .Net-Klasse Process und umgeleitete Konsolenprozesse


ASMFreak - Mo 10.12.12 13:00
Titel: .Net-Klasse Process und umgeleitete Konsolenprozesse
Hallo,

ich benutze die Klasse Process in .Net, um einen Prozess zu starten. Das funktioniert auch wie erwartet. Sofern ich damit einen GUI-Prozess starte, ist dank Process.SendInput auch alles in Ordnung: ich kann kommunizieren.
Ich vewende Process aber auch, um Konsolenprogramme zu starten. Hier hilft mir SendInput nicht weiter, da ich Input und Output des Konsolenprozesses umleiten muss.
Vor .Net hatte ich eine Process-ähnliche Klasse entwickelt, in der ich - so wie es Process-intern wohl auch erfolgt - über StartInfo den StdInput und StdOutput umgeleitet hatte; dazu hatte ich Pipes erzeugt, deren Handles ich der StartInfo-Struktur übergeben hatte. Wichtig dabei: ich hatte auf diese Weise ein Input-Handle.
Process wird, wie gesagt, wohl nicht anders vorgehen, und so wird es die beiden Handles hier auch geben, allerdings gut gekapselt und, zumindest sehe ich das so, wohl von außen nicht zugänglich - so habe ich trotzt intensiven Suchens keinen Zugang gefunden (oder habe ich den übersehen?). Zumindest das Input-Handle brauche ich aber, um die API-Funktion

Delphi-Quelltext
1:
WriteCondoleInput                    
aufrufen zu können, die meine Probleme lösen würde - hoffe ich zumindest, denn im früheren Ansatz war das nicht nötig und wurde daher nicht versucht. Denn JdeBP hat in seiner Antwort unter http://stackoverflow.com/questions/740329/send-tab-to-a-child-console-windows geäußert, dass Konsolen wohl zwischen Informationen aus Pipes und Events unterscheiden, die über StdInput hereinkommen, und vertritt die Meinung, dass selbst wenn man das StdInut-Handle hätte, WriteConsoleInput wohl wegen der Pipe nicht funktioniert; er meint:
Zitat:
That's fairly difficult within .NET

Ich habe bislang zu häufig Äußerungen des Inhalts "Das geht nicht" gehört, und dann ging's doch! Daher folgende Fragen:

Die Fragen zielen darauf ab, dass ich es nicht für besonders sinnvoll und erstrebenswert halte, das Rad neu zu erfinden und Process neu zu programmieren, nur weil ein Handle gekapselt ist. Wenn es also einen Weg gäbe, WriteConsoleInput zu nutzen, würde ich den gerne gehen. Ansonsten eine Alternative, so vorhanden.
Was mögliche Vorschläge betrift: SendMessage/PostMessage sind hier keine Lösung, da Konsolenprozesse nicht unbedingt ein Fenster besitzen, an das man Messages senden könnte ...

Bin für jeden konstruktiven Tip dankbar.
Gruß,
Trutz