Forum: PC-Programmierung c# rückgabe vom commandozeil


von Praktikant (Gast)


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 :-(

von Peter II (Gast)


Lesenswert?

Praktikant schrieb:
> versucht, aber in retval finde ich nichts was dem erwarteten returnvalue
> entspricht :-(
siehe:

https://msdn.microsoft.com/de-de/library/system.diagnostics.processstartinfo.redirectstandardoutput(v=vs.110).aspx

von Peter II (Gast)


Lesenswert?


von Peter II (Gast)


Lesenswert?

Nachtrag:

in ping kann man auch direkt in C# machen, dafür musst du kein Ping 
aufrufen.

https://msdn.microsoft.com/de-de/library/system.net.networkinformation.ping(v=vs.110).aspx

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Praktikant (Gast)


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();

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.