Forum: PC Hard- und Software Dateiausgabe abfangen unter Win


von Maxe (maxemaxe)


Lesenswert?

Hallo allerseits!

Das Problem ist folgendes, ich möchte ein Programm A aus einem Programm 
S heraus über die Kommandozeile starten und möchte dann wissen, ob 
Programm A das tut, was gestartet wurde. In Programm A gibt es 
Statusausgaben die ich dazu gerne abfangen würde. Leider gehen die nicht 
an die Standardausgabe/Kommandozeile sondern werden im Programm 
dargestellt, aber zumindest kann man einstellen, dass die Ausgabe in 
eine Datei erfolgen soll.

Meine Frage ist jetzt, ob es möglich ist unter Windows einen Dateinamen 
anzugeben, der dann die Ausgabe in die Kommandozeile umleitet?
Oder wäre es denkbar eine tatsächliche Datei zeitgleich durch Programm S 
auszulesen?
Oder drittens, kann man in Windows evtl. eine Art virtuelle Datei 
anlegen, deren Schreib- und Leseoperationen direkt an ein eigenes 
Programm gehen?

Oder hat jemand andere Ideen?

Dass die Ausgangslage nicht gut ist, ist klar. Ich brauch aber schnelle 
eine einfache Lösung :)

Danke!

von Rolf M. (rmagnus)


Lesenswert?

Maxe schrieb:
> Oder drittens, kann man in Windows evtl. eine Art virtuelle Datei
> anlegen, deren Schreib- und Leseoperationen direkt an ein eigenes
> Programm gehen?

Ja, nennt sich "named pipe":
https://learn.microsoft.com/en-us/windows/win32/ipc/named-pipes

von Maxe (maxemaxe)


Lesenswert?

Vielen Dank!
Hört sich vielversprechend an!

von Udo K. (udok)


Lesenswert?

Probiere es mal mit CON als Dateinamen.  Das wird aber nur 
funktionieren, wenn das supergeheime Program (S wie Secret) die Ausgabe 
nicht puffert.  Sonst kannst du die DLL Funktion fwrite verbiegen.  Oder 
wenn das auch nicht geht, die EXE patchen.

von Harald K. (kirnbichler)


Lesenswert?

Maxe schrieb:
> In Programm A gibt es
> Statusausgaben die ich dazu gerne abfangen würde. Leider gehen die nicht
> an die Standardausgabe/Kommandozeile sondern werden im Programm
> dargestellt, aber zumindest kann man einstellen, dass die Ausgabe in
> eine Datei erfolgen soll.

Ist das ein Konsolenprogramm, oder hat das eine GUI?

von Michael D. (nospam2000)


Lesenswert?

Udo K. schrieb:
> Sonst kannst du die DLL Funktion fwrite verbiegen.

Ein Beispiel wie das geht findest du hier: 
https://github.com/Microsoft/Detours/wiki/Using-Detours

 Michael

von Maxe (maxemaxe)


Lesenswert?

Udo K. schrieb:
> Probiere es mal mit CON als Dateinamen.
Werd ich machen, Danke!

Harald K. schrieb:
> Ist das ein Konsolenprogramm, oder hat das eine GUI?
Ist ein GUI-Programm. (Vermutlich deshalb fehlt auch die 
Konsolenausgabe..)

Michael D. schrieb:
> Ein Beispiel wie das geht findest du hier:

Sieht irgendwie kompliziert aus..

von Joe (Gast)


Lesenswert?

Erstaunlich wie kompliziert sowas unter veralteten Betriebsystemen 
gehandhabt wird. Bei modernen OS ist das Standard Benutzerwerkzeug. 
StdIn und StdOut sind einfach Dateien. Austauschbar mit anderen 
Schnittstellen wir, BT, Seriell, etc. MS ist für Masos. Mir läuft schon 
beim Gedanken an die Installation die Scheibe an.

von Xanthippos (xanthippos)


Lesenswert?

> unter veralteten Betriebsystemen

Augenblick mal, das von dir beschriebene System stammt aus den Unix IV 
von 1972.

Win schleppt immer noch Entscheidungen aus dem QDOS von 1980 mit sich 
rum.

Das kompliziertere MS System ist moderner.

von Sheeva P. (sheevaplug)


Lesenswert?

Xanthippos schrieb:
>> unter veralteten Betriebsystemen
>
> Augenblick mal, das von dir beschriebene System stammt aus den Unix IV
> von 1972.
>
> Win schleppt immer noch Entscheidungen aus dem QDOS von 1980 mit sich
> rum.
>
> Das kompliziertere MS System ist moderner.

Du verwechselst "Alter" und "Modernität". Nur weil Du Deinen Faustkeil 
heute herstellst, ist er dennoch nicht moderner als ein Sturmgewehr.

von Joe (Gast)


Lesenswert?

Xanthippos schrieb:
> Das kompliziertere MS System ist moderner.


Das ich nicht lache.
Beweise?

Leute wie Du halten Wissenschaft auch für eine Glaubensache. Dabei hast 
Du nicht  gemerkt das, wie in der Bezeichnung schon herausgestellt, es 
um Wissen und nicht um Glauben geht.

von Steve van de Grens (roehrmond)


Lesenswert?

Linux und Windows sind beide Modern, weil sie fortlaufend weiter 
entwickelt wurden und den aktuellen Stand der Technik darstellen.

Welches OS zuerst entwickelt wurde, spielt für den Begriff keine Rolle 
mehr.

von Harald K. (kirnbichler)


Lesenswert?

Maxe schrieb:
> Ist ein GUI-Programm. (Vermutlich deshalb fehlt auch die
> Konsolenausgabe..)

Dann ist es auch kein Wunder, daß so etwas wie stdout/stdin nicht 
genutzt werden.

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Maxe schrieb:
> aber zumindest kann man einstellen, dass die Ausgabe in
> eine Datei erfolgen soll.

Wenn beide Programm nicht gerade gleichzeitig auf die Datei
zugreifen, müßte das schon gehen. Vorausgesetzt, daß Programm A
die Datei nach dem Schreiben ordentlich schließt und nicht erst
beim Beenden.

von Arc N. (arc)


Lesenswert?

Heinz B. schrieb:
> Wenn beide Programm nicht gerade gleichzeitig auf die Datei
> zugreifen, müßte das schon gehen. Vorausgesetzt, daß Programm A
> die Datei nach dem Schreiben ordentlich schließt und nicht erst
> beim Beenden.

Das geht auch gleichzeitig, wenn OpenFile/CreateFile entsprechend 
benutzt wurden.

https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea
FILE_SHARE_READ

https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-openfile
OF_SHARE_DENY_READ

von Günter L. (Firma: Privat) (guenter_l)


Lesenswert?

von Maxe schrieb:
>aber zumindest kann man einstellen, dass die Ausgabe in
>eine Datei erfolgen soll.

Und den Inhalt dieser Datei willst du dann per Kommandozeile
sichtbar machen?

>der dann die Ausgabe in die Kommandozeile umleitet?


Die Kommandozeile sieht dann so aus:

type Datei.txt

von Günter L. (Firma: Privat) (guenter_l)


Lesenswert?

Oder ist der Inhalt dieser Datei eine Kommandozeile
die ausgeführt werden soll?

Dann brauchst du die Datei nur "Datei.bat" nennen
und in der Kommandozeile:

Datei

eingeben, dann wird die Kommandozeile die sich in
Datei.bat befindet ausgeführt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.