Saturday 21 April 2018

C # processo waitforexit código de retorno


C # processo waitforexit código de retorno
Obter através da App Store Leia esta publicação em nosso aplicativo!
Processo WaitForExit e obtenha o valor de retorno assíncrono.
Eu tenho uma função que inicia um processo, aguarda a saída e retorna o código de saída:
Isso está funcionando bem. Mas porque está à espera de Sair, bloqueia o Formulário de Janela (eu tenho uma Barra de Progresso do Marquee, que é conitnues em movimento e agora pára definitivamente). Não tenho ideia de como retornar o código de saída assíncrono e não consegui encontrar nenhuma solução possível que entendi.
Você pode usar este código:
Mas observe que a função de login irá sair diretamente depois de iniciar o processo para que você não possa retornar um valor inteiro. Você obtém o código de saída na função process_exited.
Você pode se registrar no evento Process. Exit e lidar com o código de saída lá.
E, em seguida, retornar o status de saída do método OnMyProcessExited.

C # processo waitforexit código de retorno
Obter através da App Store Leia esta publicação em nosso aplicativo!
Obter Exitcode de CMD usando c #
Estou usando o seguinte código para escrever o PATH, EXECUTABLE NAME e ARGUMENTS para um arquivo em lotes e executá-lo através do CMD usando c #. O problema às vezes é que o aplicativo é iniciado após a execução do arquivo em lotes. E o código c # dosent me dá exceção ou qualquer notificação.
Para o qual eu quero obter o Exitcode da CMD para determinar se os comandos foram executados corretamente. Como posso determinar o código de saída?
script dentro do Batchfile: [Note que Notepads. exe é errado para obter o erro]
"se"% ERRORLEVEL% "==" 1 "sair / B 1"
É muito mais fácil executar o processo diretamente em vez de usar a criação de um arquivo em lote que você executará mais tarde, pois você perde algum controle, pois você está usando uma camada de script em lote.
Use esse código em vez disso:
Eu uso isso em vários projetos e funciona como um encanto.
Se você deve seguir a rota do script de lote, verifique se o script de lote configurou o código de saída corretamente.
A propriedade Process. ExitCode não lhe dá o que deseja? Obviamente, você precisaria certificar-se de que o próprio arquivo em lote sai com o código de saída correto, espelhando o aplicativo que ele está executando.
A propósito, você deve usar as instruções de uso para se certificar de que todos os fluxos relevantes estão fechados diante de exceções - e eu sugiro as formas assíncronas de reagir aos dados da aplicação, em vez de IO síncrono. Se você ficar com o IO síncrono, você deve ter uma outra leitura de linha do erro padrão - caso contrário, se o processo escrever muitos dados para um erro padrão, ele bloqueará a espera de você limpar o buffer.

Exemplo de uso.
Resolvi assim:
Eu redirecionava a entrada, a saída e o erro e administrai a leitura dos fluxos de saída e erro. Esta solução funciona para o SDK 7- 8.1, tanto para o Windows 7 como para o Windows 8.
Eu tentei fazer uma aula que resolva seu problema usando a leitura de fluxo assíncrono, levando em conta Mark Byers, Rob, Stevejay responde. Ao fazê-lo, percebi que existe um erro relacionado à leitura assíncrona do fluxo de saída do processo.
Você não pode fazer isso:
Você receberá System. InvalidOperationException: StandardOut não foi redirecionado ou o processo ainda não começou.
Então, você deve iniciar a saída assíncrona lida após o processo ser iniciado:
Fazendo isso, faça uma condição de corrida porque o fluxo de saída pode receber dados antes de configurá-lo como assíncrono:
Então algumas pessoas podem dizer que você só precisa ler o fluxo antes de configurá-lo como assíncrono. Mas o mesmo problema ocorre. Haverá uma condição de corrida entre a leitura síncrona e configurará o fluxo em modo assíncrono.
Não há como conseguir uma leitura assíncrona segura de um fluxo de saída de um processo na forma real "Processo" e "ProcessStartInfo" foi projetado.
Você provavelmente está melhor usando a leitura assíncrona, como sugerido por outros usuários para o seu caso. Mas você deve estar ciente de que você pode perder algumas informações devido à condição de corrida.
Nenhuma das respostas acima está fazendo o trabalho.
A solução Rob trava e a solução 'Mark Byers' obtém a exceção descarta. (Eu tentei as "soluções" das outras respostas).
Então eu decidi sugerir outra solução:
Este código é depurado e funciona perfeitamente.
Introdução.
A resposta atualmente aceita não funciona (lança exceção) e há muitas soluções alternativas, mas nenhum código completo. Isso é, obviamente, desperdiçando muito tempo das pessoas porque esta é uma questão popular.
Combinando a resposta de Mark Byers e a resposta de Karol Tyl, escrevi um código completo baseado em como eu quero usar o método Process. Start.
Eu usei-o para criar um diálogo de progresso em torno dos comandos git. É assim que eu usei isso:
Em teoria, você também pode combinar stdout e stderr, mas não testei isso.
Este post talvez esteja desactualizado, mas descobri a principal causa por que normalmente ele trava é devido ao excesso de pilha para o redirectStandardoutput ou se você tem redirectStandarderror.
Como os dados de saída ou os dados de erro são grandes, isso causará um tempo de espera, pois ele ainda está processando por tempo indefinido.
para resolver esse problema:
Eu acho que isso é uma abordagem simples e melhor (não precisamos do AutoResetEvent):
Eu estava tendo o mesmo problema, mas a razão era diferente. No entanto, isso aconteceria no Windows 8, mas não no Windows 7. A seguinte linha parece ter causado o problema.
A solução era NÃO desativar UseShellExecute. Agora recebi uma janela popup do Shell, que é indesejável, mas muito melhor do que o programa esperando que nada de particular aconteça. Então eu adicionei o seguinte trabalho para isso:
Agora, o único problema que me incomoda é o porquê isso está acontecendo no Windows 8, em primeiro lugar.
Eu sei que isso é velho, mas, depois de ler toda essa página, nenhuma das soluções estava funcionando para mim, embora eu não tentei Muhammad Rehan porque o código era um pouco difícil de seguir, embora eu acho que ele estava no caminho certo . Quando eu digo que não funcionou, isso não é inteiramente verdade, às vezes funcionaria bem, acho que é algo a ver com a duração da saída antes de uma marca EOF.
De qualquer forma, a solução que funcionou para mim era usar diferentes threads para ler o StandardOutput e StandardError e escrever as mensagens.
Espero que isso ajude alguém, que pensou que isso poderia ser tão difícil!
As outras soluções (incluindo o EM0) ainda estão bloqueadas para o meu aplicativo, devido a tempos de espera internos e ao uso de StandardOutput e StandardError pela aplicação gerada. Aqui está o que funcionou para mim:
Editar: inicialização adicionada de StartInfo para codificar a amostra.
Depois de ler todos os posts aqui, resolvi a solução consolidada de Marko Avlijaš. No entanto, não resolveu todos os meus problemas.
Em nosso ambiente, temos um Serviço do Windows que está programado para executar centenas de diferentes. bat. cmd. exe. etc arquivos que se acumularam ao longo dos anos e foram escritas por muitas pessoas diferentes e em diferentes estilos. Não temos controle sobre a redação dos programas e programas; scripts, somos apenas responsáveis ​​pelo agendamento, execução e relatórios sobre o sucesso / falha.
Então eu tentei praticamente todas as sugestões aqui com diferentes níveis de sucesso. A resposta de Marko foi quase perfeita, mas quando executado como um serviço, ele nem sempre captou stdout. Nunca cheguei ao fundo do porquê não.

Propriedade Process. ExitCode.
A documentação de referência da API tem uma nova casa. Visite o navegador da API no docs. microsoft para ver a nova experiência.
Obtém o valor que o processo associado especificou quando terminou.
Assembly: System (no System. dll)
Valor da propriedade.
O código que o processo associado especificou quando terminou.
O processo não foi encerrado.
O Handle do processo não é válido.
Você está tentando acessar a propriedade ExitCode para um processo que está sendo executado em um computador remoto. Esta propriedade está disponível apenas para processos que estão sendo executados no computador local.
Use ExitCode para obter o status que o processo do sistema retornou quando ele saiu. Você pode usar o código de saída, como um valor de retorno inteiro de um procedimento principal ().
O valor ExitCode para um processo reflete a convenção específica implementada pelo desenvolvedor de aplicativos para esse processo. Se você usar o valor do código de saída para tomar decisões em seu código, certifique-se de que conhece a convenção de código de saída usada pelo processo de inscrição.
Os desenvolvedores geralmente indicam uma saída bem-sucedida por um valor ExitCode de zero e designam erros por valores diferentes de zero que o método de chamada pode usar para identificar a causa de um término anormal do processo. Não é necessário seguir estas diretrizes, mas são a convenção.
Se você tentar obter o ExitCode antes do processo ter saído, a tentativa lança uma exceção. Examine primeiro o recurso HasExited para verificar se o processo associado foi encerrado.
Quando a saída padrão foi redirecionada para manipuladores de eventos assíncronos, é possível que o processamento de saída não seja concluído quando HasExited retornar verdadeiro. Para garantir que o tratamento de eventos assíncrono tenha sido concluído, chame a sobrecarga WaitForExit () que não leva nenhum parâmetro antes de verificar HasExited.
Você pode usar o método CloseMainWindow ou Kill para fazer com que um processo associado seja encerrado.
Há duas maneiras de ser notificado quando o processo associado sai: de forma síncrona e assíncrona. A notificação síncrona baseia-se em chamar o método WaitForExit para pausar o processamento do seu aplicativo até o componente associado sair. A notificação assíncrona depende do evento Exit. Ao usar a notificação assíncrona, EnableRaisingEvents deve ser definido como verdadeiro para o componente Processo para receber a notificação de que o processo foi encerrado.
O exemplo a seguir inicia uma instância do Bloco de Notas. O exemplo, em seguida, recupera e exibe várias propriedades do processo associado. O exemplo detecta quando o processo sai e mostra o código de saída do processo.
para uma confiança total para o chamador imediato. Este membro não pode ser usado por código parcialmente confiável.

US Search Mobile Web.
Bem-vindo ao fórum Yahoo Search! Nós adoramos ouvir suas idéias sobre como melhorar a Pesquisa do Yahoo.
O fórum de comentários do produto do Yahoo agora requer uma ID e senha de Yahoo válidas para participar.
Agora você precisa fazer o login usando sua conta de e-mail do Yahoo para nos fornecer feedback e enviar votos e comentários às ideias existentes. Se você não possui uma ID do Yahoo ou a senha para sua ID do Yahoo, inscreva-se para uma nova conta.
Se você tiver uma ID e senha de Yahoo válidas, siga estas etapas, se desejar remover suas postagens, comentários, votos e / ou perfil no fórum de comentários do produto do Yahoo.
Vote em uma ideia existente () ou publique uma nova ideia ...
Ideias quentes Principais ideias Novas ideias Categoria Estado Meus comentários.
Quando busco meu nome, você publica resultados estranhos. As duas imagens que são eu foram removidas de um site que eu encerrei. Remover.
Ao pesquisar meu nome, estranha propaganda de imagens de palhaço vem para o capitão o palhaço em outro estado, REMOVA-O.
e as imagens.
Todas as coisas tentando implicar coisas estranhas.
O Yahoo pode desenvolver a opção para imagens serem vistas como uma apresentação de slides? Isso ajudaria em vez de ter que percorrer cada imagem e tornar esta experiência do Yahoo mais agradável. Obrigado pela sua consideração.
Você me disse para adicionar minhas outras contas, adicionei minha conta do Gmail, mas você não respondeu bem.
Não vê a sua ideia? Publique uma nova ideia ...
US Search Mobile Web.
Feedback e Base de Conhecimento.
Dê retorno.
Deutschland Finanzen Mobile DF iOS 1 idéia España Finanzas Mobile DF iOS 7 ideias Contas Painel 33 ideias Opinião do anúncio 3 ideias Respostas TH 31 ideias Respostas TH 0 idéias Respostas Fórum UV (versão de teste) 10 ideias Austrália Ideias de celebridades 0 Austrália Finanças Mobile Android 0 ideias Austrália Estilo 0 ideias Austrália Yahoo Tech 0 idéias Autos Impulso 2 idéias Aviate 1,509 idéias Canadá Finanças 1,099 ideias Canadá Finanças Mobile Android 0 ideias Canadá Finanças Mobile DF iOS 3 idéias Canadá Finanças Mobile iOS 465 ideias Canadá Página inicial 5,109 ideias Canadá Filmes 14 ideias Notícias do Canadá 873 ideias Canadá com segurança 10 idéias Canadá Tela 128 idéias Canadá Clima 94 ideias Canadá Yahoo Beleza 0 idéias Canadá Yahoo Celebrity 10 ideias Canadá Yahoo Finanças 0 ideias Canadá Yahoo Filmes 10 ideias Canadá Yahoo Notícias 0 idéias Canadá Yahoo Estilo 21 ideias Futebol universitário Pick & # 39; em 112 idéias TV conectada 361 idéias Corp Mail Test 1 1.313 idéias Corp Mail Testing 1.256 idéias Cricket 21 ideias Daily Fantasy 87 ideias Developer Netwo rk 1 ideia Double Down 86 ideias Fantasy Baseball 431 ideias Fantasy Basketball 393 ideias Fantasy Football 704 ideias Fantasy Hockey 341 ideias Fantasy Live Scoring no Matchup e Classificações 804 ideias Fantasy Sports Aplicações Android 1.366 ideias Fantasy Sports iOS Apps 2.112 idéias Finanças 1.174 ideias Finanças - CA 493 idéias Finanças - ideias US 9 Finanças Ideias ChartIQ 426 Finanças Mobile Web 403 idéias Finanças Portfolios 810 idéias Finanças Triagem de ações 35 idéias Finanças Tablet 44 idéias Flickr - Perfil 290 idéias Flickr Android 60 idéias Flickr para Apple TV 24 idéias Flickr Grupos 12 idéias Flickr Interno 0 ideias Flickr iOS Dogfooding 0 idéias Flickr iPad 139 idéias Flickr iPhone 335 ideias Flickr Nova foto Página 8,030 idéias Flickr Pesquisa 0 ideias Alimentação Revistas 0 idéias Jogos 3.147 idéias Mapas globais 1.021 ideias GS Mobile Web 42 ideias Health Pulse 3 ideias Home Page (Android) 1.689 ideias Home Page (iOS) 3.808 ideias Hong Kong Homepage 0 ideias Índia Celebridade 43 ideias Índia Finanças 493 ideias Índia Homepage 1.867 idéias Índia Estilo de vida 173 idéias Índia Filmes 84 idéias Índia Notícias 327 idéias Índia Parceiro Tata 0 idéias Índia Parceiro Portal Tikona 0 idéias Índia com segurança 15 idéias Índia Tela 165 idéias Índia Tempo 30 ideias Índia Yahoo Beleza 0 idéias Índia Yahoo Celebridade 4 idéias Índia Yahoo Finanças 0 ideias Índia Yahoo Filmes 16 idéias Índia Yahoo Notícias 0 ideias Índia Yahoo Estilo 14 ideias Indonésia Celebridade 38 ideias Indonésia Página inicial 1.155 idéias Indonésia Notícias 170 ideias Indonésia com segurança 29 ideias Indonésia Ela 34 ideias Irlanda Homepage 90 idéias Jordânia Maktoob Homepage 418 idéias Comentários sobre o anúncio de correio electrónico 10 ideias Maktoob الطقس مكتوب 5 ideias Maktoob Celebridade 1 ideia Maktoob Entretenimento 10 ideias Maktoob Estilo de vida 0 ideias Maktoob Filmes 2 ideias Maktoob Notícias 182 idéias Maktoob Tela 15 ideias Maktoob Id. de estilo 1 Maktoob ألعاب مكتوب 0 ideias Maktoob شاشة مكتوب 28 ideias Malásia Homepage 17 ideias Malásia Notícias 58 ideias Malásia com segurança 6 ideias Malásia Video 0 ideias Malásia Tempo 1 idéia Merchant Solutions 1 ideia Meu Yahoo 31,891 ideias Meu Yahoo - backup 1 idéia Meu Yahoo - US 9,176 idéias Meu Yahoo arquivo 314 idéias Novo Correio 9,427 ideias Novo Correio * 2,937 ideias Nova Zelândia Negócios & Finanças 132 idéias Nova Zelândia Página inicial 1.039 idéias Nova Zelândia com segurança 3 idéias Nova Zelândia Tela 0 idéias Notícias do PH ANC 21 ideias Filipinas Celebridade 214 ideias Filipinas Página inicial 8 ideias Filipinas Notícias 123 idéias Filipinas com segurança 12 idéias Filipinas Vídeo 0 idéias Filipinas Tempo 3 idéias Pick N Roll 19 ideias Postmaster 43 ideias Pro Football Pick & # 39; em 104 idéias Retail Pulse 0 idéias Rivals 11 idéias com segurança 165 idéias Tela para idéias iOS 0 Busca extensões 96 idéias Pesquisar Downloads de produto 88 idéias Segurança 497 ideias Experiência de login 79 idéias Singapura Entretenimento 20 idéias Cingapura Finanças 230 idéias Cingapura Página inicial 1.049 idéias Cingapura Notícias 212 idéias Cingapura com segurança 11 idéias Cingapura Tela 19 idéias Cingapura Tempo 4 idéias Cingapura Yahoo Beleza 0 idéias Cingapura Yahoo Ideias da celebridade 4 Cingapura Yahoo Finanças 0 idéias Cingapura Yahoo Filmes 0 idéias Cingapura Yahoo Notícias 0 idéias Singapore Yahoo Style 4 ideas Idéias da celebridade da África do Sul Ideia da África do Sul 374 idéia s África do Sul Notícias 23 ideias Esportes Android 1,533 ideias Esportes CA 34 ideias Esportes iOS 1.025 ideias Esportes Redesign 3.118 idéias SportsReel 6 ideias StatTracker Beta 555 ideias Survival Futebol 81 ideias Taiwan Yahoo 名人 娛樂 0 ideias Taiwan Yahoo 運動 0 ideias Tailândia Safely 2 ideias Toolbar Mail App 216 ideas Toolbar Weather App 72 ideias Tourney Pick & # 39; em 41 ideias UK & amp; Irlanda Finanças 1.077 ideias UK & amp; Jogos da Irlanda 19 ideias UK & amp; Homepage da Irlanda 437 ideias UK & amp; Irlanda Notícias 0 ideias UK & amp; Ireland News Balde interno 0 ideias UK & amp; Irlanda Notícias Lego 376 ideas UK & amp; Irlanda com segurança 38 ideias UK & amp; Irlanda TV 21 ideias UK & amp; Irlanda Vídeo 187 ideias UK & amp; Irlanda Tempo 99 ideias Reino Unido Respostas 1 ideia UK Daily Fantasy 0 ideias UK Finanças Mobile Android 12 idéias UK Finanças Mobile DF iOS 2 idéias UK Finanças Mobile iOS 308 idéias UK Yahoo Movies 23 ideias US Respostas 8,950 ideias Respostas dos EUA Mobile Web 2,154 ideias US Autos GS 442 ideias US Celebrity GS 660 ideias EUA Comentários 350 ideias US Finance Mobile Android 42 idéias US Finance Mobile iOS 550 idéias US Flickr 246 ideias Grupos dos EUA 4.130 idéias Página inicial dos EUA B1 68 ideias US Homepage B2 33 ideias US Homepage B3 50 ideias US Homepage B4 33 ideias Página inicial dos EUA B5 0 ideias Página inicial dos EUA M 7,021 ideias Página inicial dos EUA YDC 43 ideias US Homes GS 203 idéias US Live Web Insights 24 idéias US Mail 193 ideias US Mail 12,235 ideias EUA Mapas 3,491 ideias US Membership Desktop 7,969 ideias US Membership Mobile 91 ideias US Filmes GS 424 ideias US Music GS 195 ideias US News 6,004 ideias US Search App Android 2 ideias US Search App iOS 9 ideias US Search Chrome Extension 780 ideias US Chrome Chrome Extensão v2 2,197 ideias EUA Pesquisa Desktop 16 ideias US Search Desktop Bucket A 7 ideias US Search Desktop Bucket B 8 ideias US Pesquisar KG 15 ideias US Pesquisar Locais 20.764 ideias EUA Busca Mobile Web 3 ideias EUA Busca Mozilla 1 ideia EUA Pesquisar Stock Quotes 11 ideias US Search Tablet Web 1 ideia US Shine GS 1 idea US Toolbar 5,549 ideias US Travel GS 207 idéias US TV GS 367 ideias US Weather 2,314 idéias US Weather Bucket 0 ideias US Weather Mobile 13 ideias US Weather Mobile Android 2 ideias Guia de vídeos Android 149 ideias Guia de vídeo iOS 206 ideias Teste de vídeo Teste 15 ideias Web Hosting 4 ideias Yahoo Acessibilidade 358 ideias Yahoo Autos 71 ideias Yahoo Beauty 100 ideias Yahoo Ideias de celebridades 0 Yahoo Celebrity Canada 0 ideias Yahoo Decor 0 ideias Yahoo Entertainment 355 ideias Yahoo Esports 50 ideias Yahoo Feedback 0 ideias Yahoo Finance Feedback Forum 1 ideia Yahoo Finanças IN Mobile Android 0 ideias Yahoo Finance SG Mobile Android 1 ideia Yahoo FinanceReel 4 ideias Yahoo Comida 118 idéias Yahoo Gemini 2 ideias Yahoo Saúde 90 ideias Yahoo ajuda 206 ideias Yahoo Home 216 ideias Yahoo Home * 28 ideias Yahoo Lifestyle 168 ideias Yahoo Live 0 ideias Yahoo Mail 2,152 ideias Yahoo Mail Aplicativo Android 399 ideias Yahoo Mail Basic 632 ideias Yahoo Mail iOS App 47 ideias Yahoo Mail Mobile Web 1 ideia Yahoo Makers 51 ideias Yahoo Messenger 83 idéias Yahoo Mobile Developer Suite 61 idéias Yahoo Mobile para telefone 15 idéias Yahoo Mobile para Tablet 0 idéias Yahoo Music 77 idéias Yahoo News Digest Android 870 idéias Yahoo Notícias Digest iPad 0 ideias Yahoo News Digest iPhone 1,531 idéias Yahoo Newsroom Aplicativo para Android 57 idéias Yahoo Newsroom iOS App 32 ideias Yahoo Parenting 63 ideias Yahoo Politics 118 idéias Yahoo Publishing 13 ideias Yahoo Real Estate 2 ideias Yahoo Tech 459 idéias Yahoo Travel 143 idéias Yahoo TV 102 ideias Yahoo Veja 208 ideias Yahoo Weather Android 2.138 ideias Yahoo Weather iOS 22,706 ideias Yahoo! 7 Food App (iOS) 0 ideias Yahoo! 7 Página inicial Archive 57 ideas Yahoo! 7 Notícias (iOS) 23 ideias Yahoo! 7 Tela 0 ideias Yahoo! 7 TV FANGO App (Android) 1 ideia Yahoo! 7 aplicação TV FANGO (iOS) 1 ideia Yahoo! 7 TV Guide App (Android) 0 ideias Yahoo! 7 Guia de TV Guia (iOS) 1.247 ideias Yahoo! 7 Aplicação TV Plus7 (iOS) 0 ideias Yahoo! Centro de Feedback do Teste de Conceito 174 idéias Yahoo! Idéia de Contributor Network 1 Yahoo! Transliteração 29 ideias YAHOO! 7 Finanças 551 idéias Yahoo! 7 Jogos 9 ideias Yahoo! 7 Safely 19 ideias Yahoo7 Finanças Mobile DF iOS 12 ideias Yahoo7 Finanças Mobile iOS 217 ideias Yahoo7 Homepage 2.544 ideias.
Sua senha foi alterada.
Fizemos alterações para aumentar nossa segurança e restabelecer sua senha.
Acabamos de enviar-lhe um e-mail para. Clique no link para criar uma senha, depois volte aqui e faça o login.

Propriedade Process. StandardError.
A documentação de referência da API tem uma nova casa. Visite o navegador da API no docs. microsoft para ver a nova experiência.
Obtém um fluxo usado para ler a saída de erro do aplicativo.
Assembly: System (no System. dll)
Valor da propriedade.
Um StreamReader que pode ser usado para ler o fluxo de erros padrão do aplicativo.
O fluxo StandardError foi aberto para operações de leitura assíncronas com BeginErrorReadLine.
Quando um Processo grava texto em seu fluxo de erro padrão, esse texto normalmente é exibido no console. Ao redirecionar o fluxo StandardError, você pode manipular ou suprimir a saída de erro de um processo. Por exemplo, você pode filtrar o texto, formatá-lo de forma diferente ou escrever a saída para o console e um arquivo de log designado.
Para usar StandardError, você deve definir ProcessStartInfo. UseShellExecute como falso e você deve definir ProcessStartInfo. RedirectStandardError como verdadeiro. Caso contrário, a leitura do fluxo StandardError lança uma exceção.
O fluxo StandardError redirecionado pode ser lido de forma síncrona ou assíncrona. Métodos como Read, ReadLine e ReadToEnd executam operações de leitura síncrona no fluxo de saída de erro do processo. Essas operações de leitura síncrona não são concluídas até que o Processo associado escreva em seu fluxo StandardError ou encerre o fluxo.
Em contraste, BeginErrorReadLine inicia operações de leitura assíncronas no fluxo StandardError. Este método habilita um manipulador de eventos designado para a saída do fluxo e retorna imediatamente ao chamador, o que pode executar outro trabalho enquanto a saída do fluxo é direcionada para o manipulador de eventos.
As operações de leitura síncrona introduzem uma dependência entre a leitura do chamador a partir do fluxo StandardError e a escrita do processo filho a esse fluxo. Essas dependências podem resultar em condições de impasse. Quando o chamador lê do fluxo redirecionado de um processo filho, depende da criança. O chamador aguarda a operação de leitura até que a criança grava a transmissão ou encerre o fluxo. Quando o processo filho grava dados suficientes para preencher o fluxo redirecionado, ele depende do pai. O processo filho aguarda a próxima operação de gravação até que o pai lê do fluxo completo ou fecha o fluxo. A condição de deadlock resulta quando o processo do chamador e filho aguardam um para o outro para concluir uma operação, e nenhum deles pode prosseguir. Você pode evitar deadlocks avaliando as dependências entre o chamador eo processo filho.
O seguinte código C #, por exemplo, mostra como ler de um fluxo redirecionado e aguarde o processo filho sair.
O exemplo de código evita uma condição de bloqueio chamando p. StandardError. ReadToEnd antes de p. WaitForExit. Uma condição de impasse pode resultar se o processo pai chama p. WaitForExit antes de p. StandardError. ReadToEnd e o processo filho grava texto suficiente para preencher o fluxo redirecionado. O processo pai aguardaria indefinidamente o processo filho para sair. O processo filho esperaria indefinidamente para o pai ler do fluxo completo do StandardError.
Há um problema semelhante ao ler todo o texto da saída padrão e dos fluxos de erro padrão. O código C # a seguir, por exemplo, executa uma operação de leitura em ambos os fluxos.
O exemplo de código evita a condição de bloqueio executando operações de leitura assíncronas no fluxo StandardOutput. Um estado de impasse resulta se o processo pai chamar p. StandardOutput. ReadToEnd seguido de p. StandardError. ReadToEnd e o processo filho escreve texto suficiente para preencher o fluxo de erros. O processo pai aguardaria indefinidamente o processo filho para fechar o fluxo StandardOutput. O processo filho esperaria indefinidamente para o pai ler do fluxo completo do StandardError.
Você pode usar operações de leitura assíncronas para evitar essas dependências e seu potencial de impasse. Alternativamente, você pode evitar a condição de bloqueio criando dois tópicos e lendo a saída de cada fluxo em um segmento separado.
Você não pode misturar operações de leitura assíncronas e síncronas em um fluxo redirecionado. Uma vez que o fluxo redirecionado de um Processo é aberto em modo assíncrono ou síncrono, todas as operações de leitura adicionais nesse fluxo devem estar no mesmo modo. Por exemplo, não siga BeginErrorReadLine com uma chamada para ReadLine no fluxo StandardError ou vice-versa. No entanto, você pode ler dois fluxos diferentes em modos diferentes. Por exemplo, você pode chamar BeginOutputReadLine e, em seguida, chamar ReadLine para o fluxo StandardError.
O exemplo a seguir usa o comando net use junto com um argumento fornecido pelo usuário para mapear um recurso de rede. Em seguida, lê o fluxo de erros padrão do comando net e o escreve para console.
para uma confiança total para o chamador imediato. Este membro não pode ser usado por código parcialmente confiável.

No comments:

Post a Comment