O processo waitforexit não funciona


Process. waitforexit não funciona
Obter através da App Store Leia esta publicação em nosso aplicativo!
Por que WaitForExit () doesn & # 39; t wait?
Estou adicionando ação personalizada no meu projeto de instalação VS2008 (instalador MSI).
Estou chamando um arquivo em lotes para criar banco de dados e quero excluir esses arquivos depois. Eu tenho WaitForExit (), mas não vai esperar. Por quê?
nenhuma diferença com startInfo. UseShellExecute = true; O lote foi executado sem nenhum problema porque requer entrada do usuário e eu insiro y e n para perguntas. mas essa ação de exclusão ocorreu antes da minha entrada. E eu tenho uma pausa no final do arquivo em lotes. Posso assistir o processo do arquivo em lote.
EDIT: Eu testei mais de 10 vezes, não funcionou. Após o almoço, coloquei mais um waitForExit e um loop while com o cheque HasExited. ele vai dormir dentro do loop while. Eu achei que funcionou. Então eu exclui esses códigos extras, de volta a um WaitForExit. Parece que funciona agora.

Process. waitforexit não funciona
Obter através da App Store Leia esta publicação em nosso aplicativo!
System. Diagnostics. Process WaitForExit não mata o processo no tempo limite.
Executo 7-zip a partir do meu código c #:
Agora, o que eu vejo acontecer é que, quando o tempo limite atinge, ainda existe o processo 7-zip no Gerenciador de Tarefas. Por que isso está acontecendo? Coloco ambos perto e descarte.
Sua pergunta menciona três métodos na classe Process:
Nenhum desses métodos irá fazer qualquer coisa para o processo, certamente não matá-lo.
WaitForExit é um método de observação, aguardará e verá se o processo termina sozinho. A sobrecarga com o tempo limite retornará um bool dizendo se o método observou que o processo foi encerrado ou não. Se não, provavelmente ainda está funcionando.
Fechar e Dispose não faz nada para ou para o processo que está executando, ele simplesmente fecha o identificador que você possui internamente na classe Process, que é o mecanismo para como essa classe pode manter as guias do processo em questão.
É uma boa idéia fechar esse identificador quando terminar de observar o processo de execução.

Process. waitforexit não funciona
Obter através da App Store Leia esta publicação em nosso aplicativo!
Processo waitForExit () doesn & # 39; t trabalho.
Eu tenho o seguinte código:
Gostaria que a janela não fechasse depois de extrair arquivos (o unRAR. exe os extrai). WaitForExit (9000) parece não funcionar. Eu leio dezenas de sites e ainda não consigo encontrar nenhuma solução.
msdn. microsoft/en-us/library/fb4aw7b8.aspx lendo este artigo diz que o WaitForExit () não mantém o programa vivo, apenas espera que o programa associado saia. Se o programa associado (unzip. exe aqui) sair, você não poderá parar o programa unzip. exe de sair.
Process. WaitForExit faz o seu aplicativo aguardar o outro processo para sair. Não teve nenhum impacto no processo iniciado em si.
Tente criar o arquivo bat e insira o comando para aguardar (usando o limite de tempo do comando ou outra solução do thread Sleeping in a batch file.

Process. waitforexit não funciona
System. Diagnostics. ProcessStartInfo si = novo System. Diagnostics. ProcessStartInfo (& quot; cmd. exe & quot;);
System. Diagnostics. Process console = System. Diagnostics. Process. Start (si);
Quando eu uso WaitForExit (), ele aguarda por muito tempo e não retorna, mas quando eu uso WaitForExit (10000), ele retorna após 10 segundos mesmo que o comando seja executado dentro de 5 segundos. Como eu posso fazer isso.
Marcado como resposta por YiChun Chen segunda-feira, 14 de setembro de 2009 2:28.
Adicionar comando de saída na sua lista de comandos:
System. Diagnostics. Process console = System. Diagnostics. Process. Start (si);
Marque a postagem como resposta se for útil para você porque aumenta os membros para responder cada vez mais.
Proposta como resposta por _SuDhiR_ segunda-feira, 07 de setembro de 2009 10:26 AM Marcado como resposta por YiChun Chen segunda-feira, 14 de setembro de 2009 2:29 AM.
Todas as respostas.
Adicionar comando de saída na sua lista de comandos:
System. Diagnostics. Process console = System. Diagnostics. Process. Start (si);
Marque a postagem como resposta se for útil para você porque aumenta os membros para responder cada vez mais.
Proposta como resposta por _SuDhiR_ segunda-feira, 07 de setembro de 2009 10:26 AM Marcado como resposta por YiChun Chen segunda-feira, 14 de setembro de 2009 2:29 AM.
Marcado como resposta por YiChun Chen segunda-feira, 14 de setembro de 2009 2:28.
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ê sair do site do Msdn.

Process. waitforexit não funciona
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ê sair do site do Msdn.

Process. waitforexit não funciona
Estou escrevendo um programa que inicia um número desconhecido de processos em sequência usando myProcess. Start () e myProcess. WaitForExit ().
O problema parece ser que alguns processos podem iniciar outros processos e depois sair, fazendo com que meu programa continue sem o processo iniciado, na verdade, completando sua tarefa. Existe alguma maneira de monitorar esses "subprocessos"?
Desde já, obrigado.
Editar: depois de algum teste adicional, descobri que o mesmo problema ocorre quando, por exemplo, iniciando o Winword. exe. WaitForExit simplesmente não funciona com alguns aplicativos.
Tom escreveu sobre o mesmo problema neste tópico.
mas ficou satisfeito quando trabalhou em um computador diferente.
Parece que um "WINWORD. EXE" - processo já está sendo executado na minha máquina. Possivelmente porque eu uso o Word como editor de e-mail (?). Fechar isso antes de executar o meu programa (que está configurado para iniciar a palavra e aguardar a saída) & quot; resolve & quot; o problema. No entanto, não posso assumir que a winword não está sendo executada quando o meu programa é iniciado.
Não, não há muito que você possa fazer de forma confiável. O problema é que, no momento em que você chama WaitForExit, o aplicativo talvez já tenha iniciado outro aplicativo e tenha saído; Não há como saber se essa aplicação gerou outras pessoas nesse ponto.
É a natureza do Process. Start. Você não está descobrindo que WaitForExit espera indefinidamente porque o processo veio e foi antes de você chamou você?
Bem, ele cria um novo processo, é tão rápido que não pode aparecer no Process Explorer. Tudo o que o Process. Start faz é solicitar que o processo seja iniciado; Não há nada mais que o novo processo seja necessário. Se não quer ficar na memória, essa é a escolha. Não há nada que você possa fazer sobre isso, infelizmente.
Algumas aplicações sempre iniciam um novo processo. Quando você abre um arquivo Visual Studio SLN, por exemplo, ele sempre inicia dois processos. Existe uma pequena aplicação que verifica o tipo do arquivo SLN e, em seguida, abre uma versão apropriada do Visual Studio porque você só pode associar um aplicativo por extensão.
A outra questão é que algumas aplicações podem lidar com vários documentos de cada vez, o que significa que eles geralmente reutilizam os processos existentes. Em casos como este, se o processo for reutilizado porque um documento já estava aberto, isso significa que o documento que você abriu com Process. Start pode ser fechado, mas o processo de hospedagem ainda está sendo executado (atendendo o documento original) o que significa que você nunca pode Diga quando o processo que foi reutilizado quando você chamou Process. Start é feito com o documento que foi aberto com seu Process. Start.
Se você estiver olhando para integrar algum tipo de solução do WinWord, eu sugiro usar a automação. Consulte msdn. microsoft/newsgroups/default. aspx? dg=microsoft. public. officedev&lang=en&cr=US para discussões sobre a automação de produtos do Office.
Todas as respostas.
Não, não há muito que você possa fazer de forma confiável. O problema é que, no momento em que você chama WaitForExit, o aplicativo talvez já tenha iniciado outro aplicativo e tenha saído; Não há como saber se essa aplicação gerou outras pessoas nesse ponto.
É a natureza do Process. Start. Você não está descobrindo que WaitForExit espera indefinidamente porque o processo veio e foi antes de você chamou você?
Não, espero que essa situação não ocorra (É mesmo possível? Não pensei nisso antes). De qualquer forma, isso responde claramente a um dos problemas. Obrigado.
Mas deve haver uma súbita questão sobre o início do winword. exe (e similar) que. Nenhum processo extra é mostrado no taskmanager (mas ainda a palavra aparece). Quero forçar a criação de um novo processo que eu possa controlar.
Bem, ele cria um novo processo, é tão rápido que não pode aparecer no Process Explorer. Tudo o que o Process. Start faz é solicitar que o processo seja iniciado; Não há nada mais que o novo processo seja necessário. Se não quer ficar na memória, essa é a escolha. Não há nada que você possa fazer sobre isso, infelizmente.
Algumas aplicações sempre iniciam um novo processo. Quando você abre um arquivo Visual Studio SLN, por exemplo, ele sempre inicia dois processos. Existe uma pequena aplicação que verifica o tipo do arquivo SLN e, em seguida, abre uma versão apropriada do Visual Studio porque você só pode associar um aplicativo por extensão.
A outra questão é que algumas aplicações podem lidar com vários documentos de cada vez, o que significa que eles geralmente reutilizam os processos existentes. Em casos como este, se o processo for reutilizado porque um documento já estava aberto, isso significa que o documento que você abriu com Process. Start pode ser fechado, mas o processo de hospedagem ainda está sendo executado (atendendo o documento original) o que significa que você nunca pode Diga quando o processo que foi reutilizado quando você chamou Process. Start é feito com o documento que foi aberto com seu Process. Start.
Se você estiver olhando para integrar algum tipo de solução do WinWord, eu sugiro usar a automação. Consulte msdn. microsoft/newsgroups/default. aspx? dg=microsoft. public. officedev&lang=en&cr=US para discussões sobre a automação de produtos do Office.
Winword era apenas um exemplo. Mesmo que a sua resposta não fosse o que eu esperava, explica como tudo funciona e o comportamento que posso esperar.
Me poupou muito tempo procurando por algo que não existe. Obrigado.
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ê sair do site do Msdn.

Комментарии