Processo espera antes de matar


Processo waitforexit kill
Obter através da App Store Leia esta publicação em nosso aplicativo!
O processo assíncrono é iniciado e aguarde que ele termine.
Eu sou novo no modelo de thread em. O que você usaria para:
iniciar um processo que lida com um arquivo (process. StartInfo. FileName = fileName;) aguarde até que o usuário feche o processo ou abandone o segmento depois de algum tempo se o usuário fechou o processo, exclua o arquivo.
Iniciar o processo e espera deve ser feito em um segmento diferente do segmento principal, porque esta operação não deve afetar o aplicativo.
O meu aplicativo produz um relatório html. O usuário pode clicar com o botão direito em algum lugar e dizer "Exibir relatório" - agora eu recupere o conteúdo do relatório em um arquivo temporário e iniciar o processo que administra arquivos html, ou seja, o navegador padrão. O problema é que não consigo limpar, ou seja, eliminar o arquivo temporário.
"e esperar deve ser assíncrono" - Não estou tentando ser engraçado, mas não é uma contradição em termos? No entanto, como você está iniciando um processo, o evento Exit pode ajudar:
Se você quiser realmente esperar (tempo limite, etc.), então:
Para esperar assíncrono, talvez apenas use um tópico diferente?
Adicionando uma alternativa avançada a esta velha pergunta. Se você quiser aguardar a saída de um processo sem bloquear qualquer thread e ainda suportar tempos limite, experimente o seguinte:
Mais uma vez, a vantagem dessa abordagem em comparação com a resposta aceita é que você não está bloqueando nenhum tópico, o que reduz a sobrecarga do seu aplicativo.
Experimente o seguinte código.
Provavelmente não usaria um processo separado para abrir um arquivo. Em vez disso, eu provavelmente utilizaria uma linha de fundo (se eu achasse que a operação levaria muito tempo e bloqueava o segmento UI).
Claro, este não é um bom exemplo de trabalho (não retorna nada) e não mostrei como a UI é atualizada (você precisa usar BeginInvoke no nível de UI porque um thread de fundo não pode atualizar o segmento de UI). Mas essa abordagem geralmente é como eu administrai operações assíncronas.
Você pode usar o evento Exited na classe Process.
e nesse caso você pode lidar com as operações que você mencionou.

Processo waitforexit kill
Obter através da App Store Leia esta publicação em nosso aplicativo!
Como faço para matar um processo usando Vb ou C #?
Eu tenho um cenário onde eu tenho que verificar se o usuário já abriu o Microsoft Word. Se ele tiver, então eu tenho que matar o processo winword. exe e continuar a executar meu código.
Alguém tem algum código direto para matar um processo usando vb ou c #?
На этот вопрос есть ответы на Stack Overflow на русском: Убить процесс в C #
Exemplos já foram publicados aqui, mas descobri que a versão não-.exe funcionou melhor, então algo como:
Você provavelmente não precisa lidar com NotSupportedException, o que sugere que o processo é remoto.
Matar o processo do Word é possível (veja algumas das outras respostas), mas é grosseiro e perigoso: e se o usuário tiver mudanças importantes não salvas em um documento aberto? Sem mencionar os arquivos temporários temporários, isso deixará para trás.
Isso provavelmente é tão longe quanto você pode seguir nesse sentido (VB):
Isso encerrará todas as janelas do Word abertas de forma ordenada (solicitando ao usuário salvar seu trabalho, se aplicável). Claro, o usuário sempre pode clicar em 'Cancelar' neste cenário, então você deve ser capaz de lidar com este caso também (de preferência, colocando uma caixa de diálogo "por favor feche todas as instâncias do Word, caso contrário, não podemos continuar").
Aqui está um exemplo fácil de como matar todos os processos do Word.
Você pode ignorar as preocupações de segurança e criar um aplicativo muito policial simplesmente verificando se o processo do Word está sendo executado e pedindo ao usuário para fechá-lo e, em seguida, clique no botão 'Continuar' em seu aplicativo. Esta é a abordagem tomada por muitos instaladores.
Claro, você só pode fazer isso se seu aplicativo tiver uma GUI.
No meu aplicativo de bandeja, eu precisava limpar Excel e Word Interops. Então, esse método simples mata processos de forma genérica.
Isso usa um manipulador de exceção geral, mas pode ser facilmente dividido para várias exceções, como indicado em outras respostas. Posso fazer isso se meu registro produzir muitos falsos positivos (ou seja, não pode matar já morto). Mas, até agora, guia (brincadeira de trabalho).
É assim que eu liguei:
Algo assim funcionará:
É melhor prática, mais seguro e mais educado para detectar se o processo está em execução e dizer ao usuário para fechá-lo manualmente. Claro que você também pode adicionar um tempo limite e matar o processo se eles tenham ido embora.

Processo waitforexit kill
Obter através da App Store Leia esta publicação em nosso aplicativo!
Process. kill () termina o WaitForExit () (sem limite de tempo)
Eu tenho um processo que é executado em segundo plano e tem WaitForExit (), uma vez que a duração pode variar e preciso aguardar até terminar. Em ocasiões, eu preciso terminar antes de completar e desencadeio o comando. Kill () através de um evento de classe. A propriedade. HasExited muda para true, mas o código nunca passa a linha WaitForExit ().
Meu processo lança um cliente de transferência de arquivos baseado em java e executa uma transferência. O processo aparece no gerenciador de tarefas e Kill () não termina. Como eu realmente não me importo com o encerramento do processo, mas preciso do meu programa para a próxima "tarefa", adicionei Close () logo após Kill (), que libera o WaitForExit e deixa meu código "mover-se". Terminar o processo cedo será uma ocorrência rara no meu aplicativo, mas ainda preciso que ele funcione, então essa implementação terá que fazer.
WaitForExit é uma chamada direta para o sistema operacional para aguardar a sinalização do processar. Quando um processo termina, o WaitForExit será concluído. Kill é uma chamada direta para TerminateProcess, que é uma matança sem perguntas. Se usado corretamente WaitForExit retornará depois que Kill for concluída.
Então, há algum outro erro em seu código. Crie uma reprodução mais simples e você verá o problema desaparecer. O bug está escondido na complexidade do seu código.
Ou, WaitForExit retornou, mas você não percebeu. Ou, Kill nunca foi executado ou falhou. Mais uma vez, a simplificação do código revelará o problema. Você pode trazer para uma reprografia de 5 linhas? Eu duvido que você possa, mas vou olhar novamente se você fizer isso.
Nos comentários, você especificou que o kill ping funciona, mas matar seu processo especial não. A causa disso geralmente não é cancelável IO. O kernel do Windows mantém processos ao redor até que todos os IO sejam feitos. A boa notícia é que o processo irá morrer eventualmente e nenhum código será executado depois que Kill tenha retornado. A má notícia é que a limpeza de recursos não está totalmente concluída.

Process. WaitForExit ()
Se não pStart. HasExited Then.
Enquanto não pStart. HasExited ()
Se pStart. StartTime & lt; Now. AddSeconds (120) Então.
Facebook Twitter LinkedIn peritos-troca / dúvidas / 23298651 / Process-WaitForExit. html copy.
Para fazer perguntas e encontrar soluções.
Publicação destacada.
Líderes da indústria: queremos sua opinião!
Nós valorizamos seus comentários.
Yeti Cooler, Amazon eGift Card e Movie eGift Card!
Se você tiver um problema semelhante, faça uma pergunta relacionada.
Cursos sugeridos.
742 membros fizeram perguntas e receberam soluções personalizadas nos últimos 7 dias.
Junte-se à comunidade de 500 mil profissionais da tecnologia e faça suas perguntas.
Gostei da sua resposta?
Junte-se à nossa comunidade para obter mais soluções ou fazer perguntas.

Comments

Popular Posts