2012-09-28 4 views
6

Ich versuche ein Ant-Skript aus einer C# -Anwendung aufrufen. Ich möchte, dass das Konsolenfenster erscheint und aufbleibt (ich rufe jetzt nur die Eingabeaufforderung auf, aber ich möchte irgendwann ein Ameisen-Skript aufrufen, was bis zu einer Stunde dauern kann). Dies ist der Code, den ich verwende, die ich aus dem original geändert:Call Command Prompt und Leave Window Open

public void ExecuteCommandSync(object command) 
{ 
    try 
    { 
     // create the ProcessStartInfo using "cmd" as the program to be run, 
     // and "/c " as the parameters. 
     // Incidentally, /c tells cmd that we want it to execute the command that follows, 
     // and then exit. 
     System.Diagnostics.ProcessStartInfo procStartInfo = 
     new System.Diagnostics.ProcessStartInfo("cmd", "/k " + command); 

     // The following commands are needed to redirect the standard output. 
     // This means that it will be redirected to the Process.StandardOutput StreamReader. 
     procStartInfo.RedirectStandardOutput = true; 
     procStartInfo.UseShellExecute = false; 
     // Do not create the black window. 
     procStartInfo.CreateNoWindow = false; 
     // Now we create a process, assign its ProcessStartInfo and start it 
     System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
     proc.StartInfo = procStartInfo; 

     proc.Start(); 
     proc.WaitForExit(); 

    } 
    catch (Exception objException) 
    { 
     Console.WriteLine(objException); 
    } 
} 

Ich möchte auch bis zu 5 Parameter zu übergeben in, aber im Moment bin ich einfach nur darum, halten das Fenster öffnen lang genug um zu sehen, was passiert, und ich bin nicht daran interessiert, irgendeinen Inhalt zu lesen, der vom Ameisen-Skript erzeugt wird. Ich möchte niemanden bitten, meine Arbeit für mich zu tun, aber ich habe mir eine Weile mit dem Kopf überschlagen, also würde jede Hilfe sehr geschätzt werden!

Antwort

7

Diese Linie;

Ist, was das Schließen des Fensters verursacht. Entfernen Sie diese Zeile, oder fügen Sie dem Process.StandardOutput einen Handler hinzu, um den Inhalt woanders zu lesen;

string t = proc.StandardOutput.ReadToEnd(); 
+0

Das hat funktioniert! Damit war ich für die meisten von heute frustriert. Irgendeine Idee, wie man mit mehreren Befehlen arbeiten kann? Vor allem solche mit Leerzeichen wie: cd c: \\ users \\ – Stubbs

+2

Befehle mit Leerzeichen sollten so interpretiert werden, wie sie sind. Für mehrere Befehle; Möglicherweise müssen Sie die Befehle an eine Batch-Datei senden oder Befehle an den StandardInputStream senden. Ich glaube nicht, dass Sie alles in einer Zeichenfolge senden können. –

+0

Sie können auch mehrere Parameter wie folgt senden: [link] (http://stackoverflow.com/questions/5591382/how-to-execute-multiple-cammand-in-command-prompt-using-c-sharp). Dies ändert Verzeichnisse und übergibt 4 Parameter an eine Batch-Datei. Könnte für jemanden hilfreich sein. – Stubbs