lima-city: Webhosting, Domains und Cloud
0 Pluspunkte 0 Minuspunkte

Ich lese die Ausgabe von einem Prozess in einen Stringbuilder.

var sb = new StringBuilder(); 

using (Process process = new Process()) { 
	ProcessStartInfo startInfo = new ProcessStartInfo { 
		FileName = "cmd.exe", 
		Arguments = "/c " + command, 
		RedirectStandardOutput = true, 
		RedirectStandardError = true, 
		UseShellExecute = false, 
		CreateNoWindow = true 
	}; 
	process.StartInfo = startInfo; 
	process.Start(); 
	process.WaitForExit(); 
	
	using (StreamReader reader = process.StandardOutput) { 
		sb.AppendLine(reader.ReadToEnd()); 
	} 
} 

Das funktioniert zwar mit ipconfig aber mit systeminfo kommt ein leerer String heraus.

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Du hast StandardOutput und StandardError umgeleitet aber liest nur StandardOutput und außerdem erst nach WaitForExit(). systeminfo produziert deutlich mehr Text als ipconfig und sobald eine der Pipes voll ist, blockiert der Kindprozess beim Schreiben und beendet sich nie - WaitForExit() wartet “für immer”. ipconfig ist kurz genug, dass die Puffer meist nicht volllaufen, deshalb funktioniert es zufällig.

var sb = new StringBuilder();

var psi = new ProcessStartInfo
{
    FileName = "cmd.exe",
    Arguments = "/c " + command,
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    UseShellExecute = false,
    CreateNoWindow = true,
    // optional bei deutscher Ausgabe:
    // StandardOutputEncoding = Encoding.GetEncoding(850),
    // StandardErrorEncoding  = Encoding.GetEncoding(850),
};

using var process = new Process { StartInfo = psi };

process.OutputDataReceived += (s, e) => { if (e.Data != null) sb.AppendLine(e.Data); };
process.ErrorDataReceived  += (s, e) => { if (e.Data != null) sb.AppendLine(e.Data); };

process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();

process.WaitForExit();
von  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2,520 Fragen

3,037 Antworten

281 Kommentare

13 Nutzer