2012-01-11 65 views
14

Quiero hacer una aplicación simple usando stdin. Quiero crear una lista en un programa e imprimirla en otro. Se me ocurrió lo siguiente.Error de "StandardIn no se ha redirigido" en .NET (C#)

No tengo idea de si la aplicación2 funciona, sin embargo, en la aplicación1 recibo la excepción "No se ha redireccionado a StandardIn". en writeline (dentro de la declaración foreach). ¿Cómo hago lo que intento?

NOTA: Intenté establecer UseShellExecute en verdadero y falso. Ambos causan esta excepción.

 //app1 
     { 
      var p = new Process(); 
      p.StartInfo.RedirectStandardInput = true; 
      p.StartInfo.FileName = @"path\bin\Debug\print_out_test.exe"; 
      foreach(var v in lsStatic){ 
       p.StandardInput.WriteLine(v); 
      } 
      p.StandardInput.Close(); 
     } 

    //app 2 
    static void Main(string[] args) 
    { 
     var r = new StreamReader(Console.OpenStandardInput()); 
     var sz = r.ReadToEnd(); 
     Console.WriteLine(sz); 
    } 
+1

¿espera hacer p = Process.Start (v); por ejemplo..?? también establece p.UseShellExecute = false; – MethodMan

Respuesta

23

Nunca comience() el nuevo proceso.

+3

oh ha oh wow sí, eso lo solucionó. –

10

Debe asegurarse de que ShellExecute esté configurado en falso para que la redirección funcione correctamente.

También debe abrir una secuencia de comandos en ella, iniciar el proceso, esperar a que el proceso salga y cerrar el proceso.

Trate de reemplazar estas líneas:

 foreach(var v in lsStatic){ 
      p.StandardInput.WriteLine(v); 
     } 
     p.StandardInput.Close(); 

con éstos:

p.Start(); 
using (StreamWriter sr= p.StandardInput) 
{ 
    foreach(var v in lsStatic){ 
     sr.WriteLine(v); 
    } 
    sr.Close(); 
} 
// Wait for the write to be completed 
p.WaitForExit(); 
p.Close(); 
6

si desea ver un ejemplo sencillo de cómo escribir su proceso para un uso corriente este código a continuación como una Plantilla siéntase libre de cambiarlo para que se ajuste a sus necesidades.

class MyTestProcess 
{ 
    static void Main() 
    { 
     Process p = new Process(); 
     p.StartInfo.UseShellExecute = false ; 
     p.StartInfo.RedirectStandardInput = true; 
     p.StartInfo.RedirectStandardOutput = true; 

     p.StartInfo.FileName = @"path\bin\Debug\print_out_test.exe"; 
     p.StartInfo.CreateNoWindow = true; 
     p.Start(); 

     System.IO.StreamWriter wr = p.StandardInput; 
     System.IO.StreamReader rr = p.StandardOutput; 

     wr.Write("BlaBlaBla" + "\n"); 
     Console.WriteLine(rr.ReadToEnd()); 
     wr.Flush(); 
    } 
} 

// Cambiar para agregar su trabajo ingenio h su bucle for

Cuestiones relacionadas