Redirecionar entrada padrão c # processo waitforexit


Estou tentando iniciar um processo em C (Java. exe executando um arquivo jar) em um segmento separado, e redirecionar seu StandardInput, StandardError e StandardOutput. Ive redirecionar com êxito StandardError e StandardOutput, mas estou tendo problemas com StandardInput. Estou iniciando o processo desta forma: O que eu preciso é, então, ser capaz de, no meu aplicativo de formulários do Windows, ter uma caixa de texto e um botão, onde eu posso inserir os comandos que serão enviados para o processo StandardInput, mas não consigo encontrar uma maneira Para redirecioná-lo fora da tarefa, do que estou ciente de que ele requer um streamWriter, mas não consigo encontrar uma maneira de escrever para ele quando ele está sendo executado em um segmento separado. Pediu Aug 9 14 às 14:00 Você pode obter o StandardInput e StandardOutput antes de passá-los para a tarefa: Desta forma, enquanto o processo de vida, você pode acessar seus fluxos. Observe que você terá que adicionar uma verificação para certificar-se de que o processo ainda está vivo e, eventualmente, descartar seu StreamWriter e StreamReader Em vez de usar um segmento threadpool apenas para bloquear esperando WaitForExit. Podemos registrar para o evento assíncrono Process. Exited: System. Diagnostics. Process: redirecionar StandardInput, StandardOutput, StandardError 82218217 InputAndOutputToEnd: uma maneira prática de usar redirecionada entrada / saída / erro em um p. 82218217 ltparam name8221p8221gtP para redirecionar. Deve ter UseShellExecute definido como false. lt/paramgt 82218217 ltparam name8221StandardInput8221gtEssa string será enviada como entrada para o p. (Deve ser Nothing se não StartInfo. RedirectStandardInput) lt / paramgt 82218217 ltparam name8221StandardOutput8221gtA saída p8217s será coletada nesta seqüência ByRef. (Deve ser Nothing se não StartInfo. RedirectStandardOutput) lt / paramgt 82218217 ltparam name8221StandardError8221gtO erro p8217s será coletado nesta string ByRef. (Deve ser Nothing se não StartInfo. RedirectStandardError) lt / paramgt 82218217 ltremarksgt Esta função resolve o problema de deadlock mencionado em msdn. microsoft/en-us/library/system. diagnostics. p.standardoutput. aspxlt/remarksgt ltRuntimepilerServices. Extension () gt Sub InputAndOutputToEnd (ByVal p Como Diagnostics. Process, ByVal StandardInput As String. ByRef StandardOutput As String. ByRef StandardError As String) Se p Is Nothing Then Throw Novo ArgumentException (8220p deve ser non-null8221) 8216 Assumir p iniciou. Infelizmente não há maneira de verificar. Se p. StartInfo. UseShellExecute Em seguida, arremessar New ArgumentException (8220Set StartInfo. UseShellExecute para false8221) Se (p. StartInfo. RedirectStandardInput ltgt (StandardInput IsNot Nothing)) Em seguida, lançar ArgumentException novo (8220Provide uma entrada não nula somente quando StartInfo. RedirectStandardInput8221) If (PStStartInfo. RedirectStandardOutput ltgt (StandardOutput IsNot Nothing)) Em seguida, arremessa New ArgumentException (8220Provide uma saída não nula somente quando StartInfo. RedirectStandardOutput8221) Se (p. StartInfo. RedirectStandardError ltgt (StandardError IsNot Nothing)) Then Throw New ArgumentException (8220Provide Um erro não nulo somente quando StartInfo. RedirectStandardError8221) Dim outputData como novo InputAndOutputToEndData Dim errorData como novo InputAndOutputToEndData Se p. StartInfo. RedirectStandardOutput ThenHow para redirecionar a saída do processo atual para o outputstandout. Agradecimentos para a resposta. Vou publicar a minha consulta novamente. Você parece assumir que estou criando outro processo de um processo. Esse não é o caso. O que estou fazendo aqui é que 1. Há 2 processo separado e, portanto, independentes uns dos outros, 2. Um processo é a saída de dados para o console 3. Segundo processo está tentando obter dados do console do primeiro processo. Eu tentei definir essa propriedade p0.StartInfo. RedirectSta ndardOutpu t true Mas ele ainda dá exceção: quot StandardOut não foi redirecionado. quot Abaixo está o meu código .. 1 Processos de código: static void Main (string args) TextWriterTraceListener myWriter new TextWriterTraceListener ( Sy stem. Conso le. Out) Trace. Listeners. Add (myWriter) Trace. Write (quotHey. Quot) Trace. Write (quot HI como r você quot) StreamWriter standardOutput novo StreamWriter (Console. OpenStandardOutput ()) standardOutput. AutoFlush true Console. SetOut (standardOutput) Console. Read 2 Processos código: static void Main (string args) Processo p Process. GetProcessesByName (quotaquot) if (p0 null) p0.StartInfo. RedirectSta ndardOutpu t true string s p0.StandardOutput. ReadTo End ) FileStream t File. OpenWrite (quotcv. txtquot) Console. Read () Agradecemos antecipadamente. Sagi

Comments