Wednesday 23 May 2018

Processo waitforexit método


o log de Walter.
. Escrevendo enquanto aprende.
Sexta-feira, 18 de novembro de 2011.
Process. WaitForExit (Int32) trava o problema.
Como você pode ver, o código inicia um processo "cmd. exe" e passa para ele o comando que eu quero executar.
No código eu usei o comando ping - t 8.8.8.8 que, por causa da opção - t, pinga o host sem parar. O que acontece? O processo "cmd. exe" juntamente com o comando ping - t nunca sai e nunca fecha o fluxo stdout e, portanto, o código trava no Output = process. StandardOutput. ReadToEnd (); linha porque não pode ter sucesso lendo todo o fluxo.
O mesmo acontece também se um comando em um arquivo de lote for interrompido por algum motivo e, portanto, o código acima poderia funcionar continuamente por anos e, em seguida, travar repentinamente sem nenhum motivo aparente.
Você pode experimentar um deadlock se o comando que você anexar a "cmd. exe" ou o processo que você está chamando preencher a saída padrão ou o erro padrão. Isso porque nosso código não pode alcançar as linhas.
Na verdade, o processo filho (o comando ping ou um arquivo em lote ou qualquer outro processo que você esteja executando) não pode continuar se nosso programa não ler os buffers preenchidos dos fluxos e isso não pode acontecer porque o código está pendurado na linha com o processo. WaitForExit (), que irá esperar eternamente para o projeto filho sair.
O tamanho padrão de ambos os fluxos é de 4096 bytes. Você pode testar esses dois tamanhos com esses arquivos em lotes:

Método process. waitforexit
Eu tenho um aplicativo que faz.
para iniciar outra aplicação 'ABC'. Eu quero esperar até que o aplicativo termine (processo morre) e continue minha execução. Como eu posso fazer isso?
Pode haver várias instâncias do aplicativo 'ABC' em execução ao mesmo tempo.
Eu acho que você só quer isso:
Veja a página do MSDN para o método. Ele também tem uma sobrecarga onde você pode especificar o tempo limite, então você não está esperando potencialmente para sempre.
Use Process. WaitForExit? Ou assine o evento Process. Exited se não quiser bloquear? Se isso não fizer o que você deseja, forneça mais informações sobre suas necessidades.
Eu faço o seguinte na minha candidatura:
Existem alguns recursos extras que você pode achar úteis.
Você pode usar a espera para sair ou você pode pegar a propriedade HasExited e atualizar sua interface do usuário para manter o usuário "informado" (gerenciamento de expectativa):

Método process. waitforexit
Eu estou chamando um aplicativo de 3ª parte que 'às vezes' funciona em VB (é um WCF auto-hospedado). Mas, às vezes, o aplicativo de terceiros é interrompido para sempre, então adicionei um temporizador de 90 segundos a ele. O problema é, como eu sei se a coisa expirou?
Código parece com isso:
O que eu gostaria de fazer é algo assim.
Verifique o valor de retorno do método - msdn. microsoft/en-us/library/ty0d8k56.aspx - se a chamada expirou, ele retornará False.
Houve problemas conhecidos no passado em que os aplicativos congelavam ao usar o WaitForExit.

Método process. waitforexit
Estou tendo um problema com isso e espero que alguns de vocês possam lançar alguma luz sobre isso para mim? O bloco de código:
Eu mudei o URL, obviamente, mas isso não é importante. Quando eu tento executá-lo, isso me dá uma exceção no & quot; WaitForExit & quot; linha indicando & quot; Nenhum processo está associado a este objeto & quot;
Qualquer ajuda aqui seria muito apreciada!
O nome do arquivo do processo deve ser um arquivo executável.
SITE DO CONVERSOR DE CÓDIGO.
Editado por kaymaf terça-feira, 19 de outubro de 2010 18:32 Marcado como Resposta Frank L. Smith terça-feira, 19 de outubro de 2010 18:35.
O dois método funcionará.
SITE DO CONVERSOR DE CÓDIGO.
Marcado como Resposta Frank L. Smith terça-feira, 19 de outubro de 2010 18:44.
Todas as respostas.
O nome do arquivo do processo deve ser um arquivo executável.
SITE DO CONVERSOR DE CÓDIGO.
Editado por kaymaf terça-feira, 19 de outubro de 2010 18:32 Marcado como Resposta Frank L. Smith terça-feira, 19 de outubro de 2010 18:35.
O nome do arquivo do processo deve ser um arquivo executável.
SITE DO CONVERSOR DE CÓDIGO.
OH! Bem, isso explicaria isso então, mas no passado usar & quot; Process. Start (& quot; url aqui & quot;) sempre funcionou.
Você tem uma ideia de como eu poderia fazer isso para que ele abra o navegador padrão para acessar o site?
Kaymaf tem razão - isso faz sentido quando eu dou a ele um nome de arquivo ou url, isso funciona por causa da associação do arquivo. O seguinte funciona:
Eu vou com isso, mas se alguém tem uma idéia de como eu posso conseguir usar o navegador padrão, eu agradeceria.
O dois método funcionará.
SITE DO CONVERSOR DE CÓDIGO.
Marcado como Resposta Frank L. Smith terça-feira, 19 de outubro de 2010 18:44.
O dois método funcionará.
SITE DO CONVERSOR DE CÓDIGO.
Obrigado - boa informação. :)
A Microsoft está realizando uma pesquisa online para entender sua opinião sobre o site da MSDN. Se você optar por participar, a pesquisa on-line será apresentada quando você sair do site do Msdn.

Método Process. WaitForExit ()
Instrui o componente Process a aguardar indefinidamente que o processo associado seja encerrado.
Exceções.
Não há processo associado a este objeto Process.
Você está tentando chamar WaitForExit para um processo em execução em um computador remoto. O método está disponível apenas para processos em execução no computador local.
WaitForExit é usado para fazer o thread atual esperar até que o processo associado termine.
Essa sobrecarga de WaitForExit instrui o componente Process a aguardar uma quantidade infinita de tempo para o processo sair. Isso pode fazer com que um aplicativo pare de responder. Por exemplo, se você chamar CloseMainWindow para um processo que tenha uma interface com o usuário, a solicitação para o sistema operacional finalizar o processo associado poderá não ser tratada se o processo for gravado para nunca inserir seu loop de mensagem.
Quando um processo associado sai (é encerrado pelo sistema operacional através de uma finalização normal ou anormal), o sistema armazena informações administrativas sobre o processo e retorna ao componente que chamou WaitForExit. O componente de processo pode acessar as informações, que inclui o ExitTime, usando o identificador para o processo de saída.
Como o processo associado foi encerrado, a propriedade Handle do componente não aponta mais para um recurso de processo existente. Em vez disso, o identificador pode ser usado apenas para acessar as informações do sistema operacional sobre o recurso do processo. O sistema está ciente de identificadores para processos que não foram liberados pelos componentes do processo, portanto, ele mantém as informações de ExitTime e identificador na memória até que o componente de processo especificamente libera os recursos. Por esse motivo, sempre que você chamar a instância Start for Process, chame Close quando o processo associado tiver terminado e você não precisar mais de nenhuma informação administrativa sobre ele. Close libera a memória alocada para o processo finalizado.
Requisitos
Plataformas: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, família Windows Server 2003.

Processo . Método WaitForExit.
A documentação de referência da API tem uma nova casa. Visite o Navegador da API em docs. microsoft para ver a nova experiência.
Define o período de tempo para aguardar a saída do processo associado e bloqueia o thread atual de execução até que o tempo tenha transcorrido ou o processo tenha sido encerrado. Para evitar o bloqueio do segmento atual, use o evento Exited.
Para exemplos de código, consulte as páginas de referência de propriedade StandardError e ExitCode.
Assembly: System (no System. dll)
Instrui o componente Process a aguardar indefinidamente que o processo associado seja encerrado.
Instrui o componente Processo a aguardar o número especificado de milissegundos para o processo associado sair.

No comments:

Post a Comment