2009-03-30 13 views

Respuesta

19

Bien, podría comenzar un nuevo proceso cmd.exe y usar stdio y stdout para enviar y recibir datos.

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe") 
{ 
    RedirectStandardError = true, 
    RedirectStandardInput = true, 
    RedirectStandardOutput = true, 
    UseShellExecute = false 
}; 

Process p = Process.Start(psi); 

StreamWriter sw = p.StandardInput; 
StreamReader sr = p.StandardOutput; 

sw.WriteLine("Hello world!"); 
sr.Close(); 

Más información sobre MSDN.

+10

hmm. No puedo hacer que esto funcione en Windows 7 + .NET 4. Me pregunto qué cambió ... – LamonteCristo

+1

No puedo hacer que esto funcione tampoco. El proceso comienza porque puedo verlo en el Administrador de tareas, pero la ventana de la consola nunca aparece, independientemente de lo que establezca las propiedades 'CreateNoWindow' y' WindowStyle' del objeto ProcessStartInfo. Tal vez está relacionado con los permisos en Windows 7? –

+0

No funciona para mí en Win 8.1 tampoco. – Krummelz

-3

Se adjunta una única consola a cualquier proceso. Entonces, en resumen, no puedes. Pero hay formas de "simularlo"

3

Lo siguiente desactiva una cantidad de ventanas de consola dependiente de la aplicación y almacena la cantidad y los parámetros de la consola dentro de un diccionario de cadenas que luego se enlaza para generar la cantidad necesaria de aplicaciones de consola generadas. Solo necesitarías el proceso si solo generas uno, por supuesto.

//Start looping dic recs and firing console 
foreach (DictionaryEntry tests in steps) 
{ 
    try 
    { 
     Process runCmd = new Process(); 
     runCmd.StartInfo.FileName = CONSOLE_NAME; 
     runCmd.StartInfo.UseShellExecute = true; 
     runCmd.StartInfo.RedirectStandardOutput = false; 
     runCmd.StartInfo.Arguments = tests.Value.ToString(); 

     if (cbShowConsole.Checked) 
     { 
      runCmd.StartInfo.CreateNoWindow = true; 
      runCmd.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 
     } 
     else 
     { 
      runCmd.StartInfo.CreateNoWindow = false; 
      runCmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     } 
     runCmd.Start();     
    } 
    catch (Exception ex) 
    { 
     string t1 = ex.Message; 
    } 
} 

Tenga en cuenta que esto se debe ejecutar oculto (CreateNoWindow) o visible.

Cuestiones relacionadas