c# rückgabe vom commandozeil

Gast #5020351
Lesenswert?

Hi,
ich starte mit c# ein kommandozeilenprogramm.
Wenn ich dieses Konsolenprogramm nicht mit meinem C#-Programm sondern 
mit der Win7-Konsole (cmd) ausführe, sehe ich in der Konsole einen 
Rüggabewerte. Wie bekomme ich dieses Rückgabewert mun in mein 
C#-Programm?

1
C#
2
string command = "127.0.0.1";
3
string path = "C:\Windows\SysWOW64\ping.exe";
4
Process.Start(path, command);

in der Konsole sehe ich nach ausführen des pings das hier:
1
Microsoft Windows [Version 6.1.7601]
2
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.
3

4
C:\Users\...>ping 127.0.0.1
5

6
Ping wird ausgeführt für 127.0.0.1 mit 32 Bytes Daten:
7
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
8
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
9
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
10
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
11

12
Ping-Statistik für 127.0.0.1:
13
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
14
    (0% Verlust),
15
Ca. Zeitangaben in Millisek.:
16
    Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms
17

18
C:\Users\...>


Wie kann ich diesen Text nun auch im C# als string erhalten?
Ich habe es mit
1
var retval = Process.Start(path, command);
versucht, aber in retval finde ich nichts was dem erwarteten returnvalue 
entspricht :-(
Persönliche Seite #5020422
Lesenswert?

Praktikant schrieb:
> Wenn ich dieses Konsolenprogramm nicht mit meinem C#-Programm sondern
> mit der Win7-Konsole (cmd) ausführe, sehe ich in der Konsole einen
> Rüggabewerte.

Das ist kein Rückgabewert, das ist der Text, den das aufgerufene 
Programm auf seinem stdout/stderr ausgibt.

Ein Rückgabewert wird in der Konsole nicht angezeigt, der kann nur in 
Batchdateien mit "errorlevel" abgefragt werden.

Du aber willst gar nicht den Rückgabewert haben, Du willst die 
Ein/Ausgabe des Programmes umleiten.
Gast #5020502
Lesenswert?

hallo und danke für Eure Hilfe! - Der entscheidende Tipp war die 
Umleitung des StandardOutputs.

Mit folgendem Code habe ich die Aufgabe gelöste
1
Process p = new Process();
2
p.StartInfo.UseShellExecute = false;
3
p.StartInfo.FileName = "C:\\Program Files\\Oracle\\VirtualBox\\VBoxManage.exe";
4

5
string command;
6
command = "showvminfo ";
7
command += tbVMname.Text;
8

9
p.StartInfo.Arguments = command;
10
p.StartInfo.RedirectStandardOutput = true; // Hier wird der Output umgeleitet!
11
p.Start();
12

13
StreamReader reader = p.StandardOutput;
14
string output = reader.ReadToEnd();
15

16
p.WaitForExit();
17
p.Close();

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren