Laden...

[erledigt] Ausführung einer Kommandozeile aus einem C#-Programm funktioniert nicht wie in der Shell

Erstellt von PeterSchmidt vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.540 Views
P
PeterSchmidt Themenstarter:in
2 Beiträge seit 2014
vor 9 Jahren
[erledigt] Ausführung einer Kommandozeile aus einem C#-Programm funktioniert nicht wie in der Shell

Hi,

ich habe ein kleines Problem. Ich will eine Kommandozeile aus einem Plugin heraus ausführen. Durch die Kommandozeile soll aus der angegebenen Textdatei eine Bilddatei erstellt werden. Momentan verwende ich dazu folgenden Code:

 System.Diagnostics.Process.Start("cmd.exe"," /C C:\\Program Files\\Graphviz2.36\\bin\\dot.exe -Tpng C:\\Users\\Peter\\Downloads\\GraphOfText.txt >C:\\Users\\Peter\\Downloads\\output.png");

Wenn ich die Kommandozeile über die Eingabeaufforderung ausführe funktioniert es ohne Probleme. Wenn ich aber das Programm mit obrigen Code ausführe, dann wird zwar die Bilddatei erstellt, diese ist aber leer.
Hat jemand eine Idee, woran das liegen könnte?

D
216 Beiträge seit 2009
vor 9 Jahren

Das Problem sind die Leerzeichen in den Pfaden, da musst du die einzelnen Parameter in " schreiben:

System.Diagnostics.Process.Start("cmd.exe", " /C \"C:\\Program Files\\Graphviz2.36\\bin\\dot.exe\" -Tpng \"C:\\Users\\Peter\\Downloads\\GraphOfText.txt\" > \"C:\\Users\\Peter\\Downloads\\output.png\"");

Du solltest dein Programm auch direkt ausführen können:

System.Diagnostics.Process.Start("C:\\Program Files\\Graphviz2.36\\bin\\dot.exe", "-Tpng \"-oC:\\Users\\Peter\\Downloads\\output.png\" \"C:\\Users\\Peter\\Downloads\\GraphOfText.txt\"");
4.931 Beiträge seit 2008
vor 9 Jahren

Leserlicher wäre die Verwendung des @-Zeichens, s.a. [FAQ] Was bedeutet das @ (=at) vor String-Literalen? Und: Wissenswertes zu Escape-Sequenzen:


System.Diagnostics.Process.Start(@"C:\Program Files\Graphviz2.36\bin\dot.exe", "-Tpng ""-oC:\Users\Peter\Downloads\output.png"" ""C:\Users\Peter\Downloads\GraphOfText.txt""");

P
PeterSchmidt Themenstarter:in
2 Beiträge seit 2014
vor 9 Jahren

Danke! Jetzt funktioniert es.