Sunday 8 April 2018

Processo do exemplo waitforexit java


Process. waitforexit exemplo java
Obter através da App Store Leia esta publicação em nosso aplicativo!
Aguarde até um processo terminar.
Eu tenho um aplicativo que faz.
para iniciar outro aplicativo 'ABC'. Eu quero aguardar até que o aplicativo final (processo morre) e continuar minha execução. Como eu posso fazer isso?
Pode haver várias instâncias do aplicativo 'ABC' executando ao mesmo tempo.
Eu acho que você só quer isso:
Consulte a página MSDN para o método. 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 você não quer bloquear? Se isso não fizer o que você quer, por favor nos dê mais informações sobre seus requisitos.
Faço o seguinte na minha aplicação:
Há alguns recursos extras lá que você pode achar úteis.
Você pode usar a espera para sair ou você pode pegar a propriedade HasExited e atualizar sua UI para manter o usuário "informado" (gerenciamento de expectativa):

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.
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.
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.
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.
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.

Ir para o mercado australiano.
Um StreamReader que process. waitforexit ser usado para ler o fluxo de saída padrão do aplicativo. O fluxo StandardOutput não foi definido para o redirecionamento; assegure ProcessStartInfo. RedirectStandardOutput é definido como true e ProcessStartInfo. UseShellExecute é definido como um exemplo. O fluxo StandardOutput foi aberto para operações de leitura assíncronas com BeginOutputReadLine. Quando um Processo grava texto em seu fluxo padrão, esse texto normalmente é exibido no console. Ao redirecionar o fluxo StandardOutput, você pode manipular ou suprimir a saída de um processo. Por exemplo, o java 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 o StandardOutderou, você deve configurar o ProcessStartInfo. UseShellExecute para false e você deve configurar ProcessStartInfo. Caso contrário, a leitura do fluxo StandardOutput lança uma exceção. O fluxo de saída StandardOutput redirecionado pode ser lido de forma síncrona ou assíncrona. Métodos como ReadReadLineand ReadToEnd executam operações de leitura síncrona no fluxo de saída do processo. Essas operações de leitura síncrona não são concluídas até que process. waitforexit Processo associado grava seu fluxo StandardOutput ou fecha o fluxo. Em contraste, BeginOutputReadLine inicia as operações de leitura assíncronas java o fluxo StandardOutput. Este método habilita um manipulador de eventos designado para a saída de fluxo e retorna imediatamente ao chamador, o que pode executar outro trabalho enquanto o exemplo java de saída é direcionado para o manipulador de eventos. As operações de leitura síncrona introduzem uma dependência entre a leitura do chamador do fluxo StandardOutput e a escrita do processo filho para esse fluxo. Essas dependências processam. Por enquanto, isso resulta 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 de java, 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 java 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 java o processo filho para sair. O exemplo de código evita uma condição de bloqueio chamando p. Uma condição de impasse pode resultar se o processo process. waitforexit chamar p. ReadToEnd eo processo filho grava texto suficiente para preencher o fluxo redirecionado. Exemplo de processo pai esperaria indefinidamente para que o processo filho saísse. O processo filho esperaria indefinidamente para o pai ler do fluxo de StandardOutput completo. Há um problema semelhante quando você lê todo o texto java tanto o fluxo de erro padrão do exemplo de saída 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 de exemplo executando operações de leitura assíncronas no fluxo StandardOutput. Ocorrer um estado de impasse se o processo pai for p. ReadToEnd seguido de p. ReadToEnd e o processo java 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 usar o javascript do deadlock 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 processo redirecionado. Até o início 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 BeginOutputReadLine com uma chamada para ReadLine no fluxo StandardOutput 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, por exemplo, fluxo StandardError. O exemplo a seguir executa o ipconfig. RedirectStandardOutput Process. waitforexit Class System. Downloads Visual Studio Process. waitforexit Software de teste Downloads gratuitos Recursos do Office Recursos do SharePoint Server Recursos do SQL Server Express Recursos do Windows Server Programas Exemplo Visão geral Administradores Estudantes Microsoft Imagine Microsoft Estudante Parceiros ISV Startups Eventos Comunidade Revista Fóruns Blogs Canal 9 Documentação APIs e referência Centro de desenvolvimento Amostras Conteúdo aposentado . O conteúdo solicitado foi removido. Propriedades de Processo de Classe de Processo de Diagnóstico. Propriedades do processo Propriedade StandardOutput. Reduzir a tabela de conteúdo. Esta documentação é arquivada e não está sendo mantida. Versão atual do Framework NET. Obtém um fluxo usado para ler o resultado textual da aplicação. StreamReader A StreamReader que pode ser usado para ler o fluxo de saída padrão do aplicativo. Exceção Condição InvalidOperationException O fluxo StandardOutput não foi definido para o redirecionamento; Process. waitforexit ProcessStartInfo. Nota Para usar StandardOutputyou deve configurar ProcessStartInfo. Observação Você não pode misturar operações de leitura assíncronas e síncronas em um fluxo redirecionado. Saída WriteLine; processo. Process. waitforexit para confiança total para o chamador de exemplo. Este membro não pode ser usado por código parcialmente confiável. NET Framework Process. waitforexit desde 1. Esta página é útil? Agradecemos seus comentários. Centro de desenvolvimento Windows Java Visual Studio Microsoft Azure Mais Recursos de aprendizagem Microsoft Virtual Example Channel 9 MSDN Magazine. Comunidade Fóruns Blogs Codeplex. Programas BizSpark para startups Microsoft Imagine para estudantes.
Resolvendo o problema do produtor e do consumidor.
4 pensamentos sobre & ldquo; Process. waitforexit example java & rdquo;
Se, em qualquer caso, você não ficará satisfeito com o trabalho que o nosso escritor lhe dará, você pode solicitar revisão a qualquer momento.
Somos parceiros das redes de estudantes mais respeitadas e bem conhecidas, por isso escrever para nós será benéfico tanto para você quanto para nossos visitantes.
Em todas as áreas do país, os educadores estão tentando ajudar os alunos a manter a tecnologia, mas há mais mudanças essenciais para a preparação da próxima geração para o futuro.
Muitas vezes eu vi um poeta se retirar, tendo desfrutado a parte mais valiosa de uma fazenda, enquanto o agricultor grosso supunha que ele tinha apenas algumas maçãs selvagens.

Process. waitforexit exemplo java
A sobrecarga WaitForExit () () () é usada para fazer o thread atual aguardar até o processo associado terminar. Esse método instrui o componente Processo a aguardar uma quantidade infinita de tempo para que o processo saia. Isso pode fazer com que um aplicativo pare de responder. Por exemplo, se você chamar CloseMainWindow para um processo que tenha uma interface de usuário, a solicitação ao sistema operacional para encerrar o processo associado pode não ser tratada se o processo for gravado para nunca entrar no loop de mensagem.
Esta sobrecarga garante que todo o processamento foi concluído, incluindo o tratamento de eventos assíncronos para saída padrão redirecionada. Você deve usar essa sobrecarga após uma chamada para a sobrecarga WaitForExit (Int32) quando a saída padrão foi redirecionada para manipuladores de eventos assíncronos.
Isso é, naturalmente, para. O que faz você pensar que não aguarda que o processo de nota termine? Quais são os sinais disso? Qual é a prova?
Processo p = novo Processo ();
MessageBox. Show (& quot; agora o navegador deve estar fechado & quot;);
Exceto que você não obtém um objeto de processo que você pode usar. Se você tentar.
Dim myProc como novo processo ()
myProc = Process. Start (& quot; iexplore & quot ;, & quot; finance. yahoo/q/hp? s = & quot; + symbol);
A Microsoft está conduzindo uma pesquisa on-line para entender sua opinião sobre o site da Msdn. Se você optar por participar, a pesquisa on-line será apresentada quando você deixar o site Msdn.

Process. waitforexit exemplo java
Dentro de um aplicativo que estou escrevendo, preciso fazer o seguinte:
Execute um aplicativo GUI externo (para os propósitos deste exemplo, vamos assumir o seu MS Word). Bloqueie o segmento atual até que o aplicativo GUI externo tenha sido fechado.
Minha primeira tentativa de fazer isso foi fazer uso do objeto System. Diagnostics. Process.
// Inicialize o objeto de processo.
myProcess. StartInfo. FileName = & quot; C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 \\ Winword. exe & quot ;;
myProcess. StartInfo. WorkingDirectory = & quot; C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 & quot ;;
// Inicie o processo e aguarde que ele seja fechado.
System. Windows. Forms. MessageBox. Show (& quot; Aplicativo de usuário fechado & quot;);
Quando eu executo o código acima, o MS Word é iniciado como esperado. No entanto, a chamada WaitForExit () não parece estar fazendo seu trabalho quando eu exibir a caixa de mensagem instantaneamente instantaneamente depois que o processo do MS Word for iniciado e não depois que ele for fechado.
Por que a chamada WaitForExit () não aguarda o processo MSWord para terminar? O fato de eu estar lançando um aplicativo GUI em vez de um aplicativo de linha de comando é significativo?
Qualquer ajuda seria muito apreciada.
Todas as respostas.
Depois de alguns testes, concluí que é porque não há um documento de usuário carregado. Se você fizer o parâmetro do nome do arquivo um documento real funciona como esperado:
// Inicie o processo e aguarde que ele seja fechado.
System. Windows. Forms. MessageBox. Show (& quot; Aplicativo de usuário fechado & quot;);
Seja ou não um documento carregado, não deve ser importante? O objeto Processo apenas fornece uma maneira genérica de executar e monitorar processos, não sabe nada sobre os internos do que o Word carregou com segurança?
Em qualquer caso, tentei o código como recomendado e recebo uma exceção "Sem processo associado a este objeto", presumivelmente porque foi passado o nome do arquivo de um documento em vez de um executável.
(Eu também devo mencionar que estou usando apenas o Word como exemplo aqui para resolver esse problema específico e, portanto, não quero ficar muito pendurado no que está acontecendo no Word Word. Eu tentei e não usei WaitForExit () com uma variedade de aplicativos GUI.)
OK, acabei de chegar em casa e tentei isso no meu PC doméstico, e você não saberia que o código funciona! Não tenho certeza por que causa problemas no laptop do meu trabalho.
Em qualquer caso, obrigado por você ajudar a DMan.
Proposta como resposta por Brad Mathews sexta-feira, 19 de dezembro de 2008 12:55.
objProcess As New System. Diagnostics. ProcessStartInfo ("Winword. exe", "quot; / t c: \ mydoc. doc")
A Microsoft está conduzindo uma pesquisa on-line para entender sua opinião sobre o site da Msdn. Se você optar por participar, a pesquisa on-line será apresentada quando você deixar o site Msdn.

No comments:

Post a Comment