2017-08-28 9 views
0

Ich bin auf der Suche nach automatisieren nupkg Erstellung in einer C# App. Ich ziele darauf ab, nugget.exe in meinem Projekt einzubeziehen und System.Diagnostics zu verwenden, um cmd.exe als einen Prozess zu starten und dann die erforderlichen Befehle zu übergeben, die "cd project \ path \ here", "nuget spec something.dll" wären 'und' nugget pack etwas.nuspec '.Wie mehrere Cmd-Befehle von C# Konsole App

Der Code, den ich bisher habe, ist:

 Process p = new Process(); 
     ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe", @"mkdir testdir"); 

     p.StartInfo = info; 
     p.Start(); 

     Console.ReadLine(); 

Allerdings ist es nicht einmal die testdir zu schaffen, und ich habe keine Ahnung, wie diese Befehle an die Kette. Es gibt eine Methode namens WaitForInputIdle auf meinem Prozess, aber es löst Ereignisse aus und ich habe keine Ahnung, wie ich mit diesen umgehen soll, um ehrlich zu sein.

Eine perfekte Lösung würde mir auch die Ausgabe und Eingabe lesen. Ich habe versucht, mit StreamWriter p.StandardInput, aber dann gibt es das Problem zu überprüfen, ob ein Befehl abgeschlossen ist und was das Ergebnis war.

Jede Hilfe würde sehr geschätzt werden.

Bearbeiten: Erfolg! Ich habe es geschafft, ein Verzeichnis zu erstellen :) Hier ist mein Code jetzt:

Process p = new Process(); 
    ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe"); 
    info.RedirectStandardInput = true; 
    info.UseShellExecute = false; 

     p.StartInfo = info; 
     p.Start(); 

     using (StreamWriter sw = p.StandardInput) 
     { 
      sw.WriteLine("mkdir lulz"); 
     } 

Immer noch keine Ahnung, wie für die Eingabe warten und mit mehreren Befehlen folgen, though.

+0

'Directory.CreateDirectory' zu sehen bekommen wollen oder erstellen bat-file und starte es. – Sinatr

+0

Sinatr Ich versuche nicht, ein Verzeichnis zu erstellen, das nur versucht, cmd zur Arbeit zu bekommen. – Nech

+0

Da Sie Ihre eigene Frage beantworten könnten, wäre es gut, wenn Sie Ihre Lösung nicht als Bearbeitung, sondern als Antwort posten würden. –

Antwort

0

Sie können dies tun, indem Sie drei Möglichkeiten

1- Die einfachste Möglichkeit ist, die beiden Befehle mit dem ‚&‘ Symbol zu kombinieren.

var processInfo = new ProcessStartInfo("cmd.exe", @"command1 & command2"); 

2- Legen Sie das Arbeitsverzeichnis des Prozesses über ProcessStartInfo fest.

var processInfo = new ProcessStartInfo("cmd.exe", @"your commands here "); 
processInfo.UseShellExecute = false; 
processInfo.WorkingDirectory = path; 

3- Umleiten der Eingabe und Ausgabe des Prozesses. (Auch durch die Process getan) .Dieses ist erforderlich, wenn Sie mehr für den Prozess schicken, oder wenn Sie die Ausgabe des Prozesses

Auch this answer