2012-09-28 39 views
6

Estoy tratando de invocar un script ant desde una aplicación C#. Quiero que la ventana de la consola aparezca y permanezca activa (solo llamo al símbolo del sistema ahora, pero finalmente quiero llamar a un script ant, que puede demorar hasta una hora). Este es el código que estoy usando, que alteré del original:Llamar al símbolo del sistema y dejar la ventana abierta

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

también desea pasar de hasta 5 parámetros, pero en este momento estoy solo preocupados por mantener la ventana abierta el tiempo suficiente para ver qué está pasando, y no estoy interesado en leer ningún contenido generado por el guión de la hormiga. No quiero pedirle a nadie que haga mi trabajo por mí, pero me he estado dando vueltas en esto por un tiempo, así que cualquier ayuda sería muy apreciada.

Respuesta

7

Esta línea;

procStartInfo.RedirectStandardOutput = true; 

Es lo que está causando que se cierre la ventana. Elimine esta línea o agregue un controlador a Process.StandardOutput para leer los contenidos en otro lugar;

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

Eso funcionó! He estado frustrado con eso por la mayor parte de hoy. ¿Alguna idea de cómo hacer que funcione con múltiples comandos? Especialmente aquellos con espacios en blanco como: cd c: \\ users \\ – Stubbs

+2

Los comandos con espacios deben interpretarse correctamente tal como están. Para comandos múltiples; Puede que necesite enviar los comandos a un archivo por lotes, o mirar enviar comandos a StandardInputStream, no creo que pueda enviarlo todo en una sola cadena. –

+0

También puede enviar múltiples parámetros como este: [link] (http://stackoverflow.com/questions/5591382/how-to-execute-multiple-cammand-in-command-prompt-using-c-sharp). Esto cambia directorios y pasa 4 parámetros a un archivo por lotes. Podría ser útil para alguien. – Stubbs

Cuestiones relacionadas