Início do processo waitforexit
Process. start waitforexit
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):
Tópico: [RESOLVIDO] process. start e process. waitforexit.
Ferramentas de Tópicos.
Modo Linear Alterne para o Modo Híbrido Alterne para o Modo Rosqueado.
[RESOLVIDO] process. start e process. waitforexit.
Como posso fazer o programa esperar que o processo termine?
Re: [RESOLVIDO] process. start e process. waitforexit.
FAQ de desenvolvimento de banco de dados VBForums.
Minhas submissões do CodeBank: VB | C #
Re: [RESOLVIDO] process. start e process. waitforexit.
Re: [RESOLVIDO] process. start e process. waitforexit.
Visual Basic VBForums Visual Basic VS 2010 [RESOLVIDO] process. start e process. waitforexit.
Permissões de postagem.
Você não pode postar novos tópicos Você não pode postar respostas Você não pode postar anexos Você não pode editar suas mensagens.
Código BB está Ligado Smilies estão Ligados [IMG] o código está Ligado [VÍDEO] o código está Ligado Código HTML está Desligado.
Obtenha conselhos práticos e aprenda as melhores práticas para mover seus aplicativos do RDBMS para o Banco de dados de engajamento do Couchbase. (patrocinado) & rarr; Libere sua estratégia de DevOps sincronizando as alterações de aplicativos e bancos de dados.
Aprenda a reduzir os ciclos de desenvolvimento de banco de dados, integrar revisões de qualidade de código no fluxo de trabalho de Integração Contínua e entregar código 40% mais rápido. (patrocinado) & rarr; Crie aplicativos em escala de planeta com o Azure Cosmos DB em minutos.
Veja uma demonstração mostrando como você pode criar aplicativos distribuídos globalmente em escala planetária em minutos com o Azure Cosmos DB. (webinar patrocinado) & rarr; O guia abrangente para computação em nuvem.
Uma visão geral completa do Cloud Computing focada no que você precisa saber, desde a seleção de uma plataforma até a escolha de um fornecedor de nuvem. & rarr; Pode ser hora de atualizar seu banco de dados se.
Entenda melhor os sinais de que sua empresa superou seu banco de dados atual. (webinar patrocinado).
Processo . Método WaitForExit (Int32)
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.
Instrui o componente Processo a aguardar o número especificado de milissegundos para o processo associado sair.
Assembly: System (no System. dll)
Parâmetros
O período de tempo, em milissegundos, para aguardar a saída do processo associado. O máximo é o maior valor possível de um inteiro de 32 bits, que representa infinito para o sistema operacional.
Valor de retorno.
true se o processo associado tiver saído; Caso contrário, false.
A configuração de espera não pôde ser acessada.
Nenhuma identificação de processo foi definida e uma Handle da qual a propriedade Id pode ser determinada não existe.
Não há processo associado a este objeto Process.
Você está tentando chamar WaitForExit (Int32) para um processo que está sendo executado em um computador remoto. Este método está disponível apenas para processos em execução no computador local.
WaitForExit (Int32) faz com que o segmento atual espere até que o processo associado termine. Deve ser chamado depois que todos os outros métodos forem chamados no processo. Para evitar o bloqueio do segmento atual, use o evento Exited.
Este método instrui o componente Process a aguardar uma quantidade finita de tempo para o processo sair. Se o processo associado não sair no final do intervalo porque a solicitação para finalizar é negada, false é retornado para o procedimento de chamada. Você pode especificar um número negativo (Infinito) por milissegundos e Processo. WaitForExit (Int32) se comportará da mesma maneira que a sobrecarga WaitForExit (). Se você passar 0 (zero) para o método, ele retornará true somente se o processo já tiver saído; caso contrário, retorna imediatamente false.
No Framework 3.5 e em versões anteriores, se milissegundos fosse -1, a sobrecarga WaitForExit (Int32) aguardava milissegundos MaxValue (aproximadamente 24 dias), não indefinidamente.
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 esse método retornar. Para garantir que o tratamento assíncrono de eventos tenha sido concluído, chame a sobrecarga WaitForExit () que não recebe nenhum parâmetro após receber um valor verdadeiro dessa sobrecarga. Para ajudar a garantir que o evento Exited seja tratado corretamente nos aplicativos do Windows Forms, defina a propriedade SynchronizingObject.
Quando um processo associado sai (é desligado pelo sistema operacional por meio de uma finalização normal ou anormal), o sistema armazena informações administrativas sobre o processo e retorna ao componente que chamou WaitForExit (Int32). 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.
Process. start waitforexit
se eu iniciar outro aplicativo CF usando o seguinte código no NetCF2.0, o aplicativo nunca sai, ele simplesmente parece travar?
Dim p como novo processo.
Dim info As New ProcessStartInfo (& quot; Sync. exe & quot ;, & quot; 1 & quot;)
Se eu executar o aplicativo manualmente ou percorrê-lo, ele sai conforme o esperado. É quase como se o WaitForExit estivesse vivo ou algo assim?
Se você tiver uma repro fi nição confiável que não esteja usando componentes de terceiros, preencha um relatório de bug aqui.
Todas as respostas.
Não, WaitForExit () apenas espera por aplicativo para saídas, ele não o mantém ativo. Deve ser algo no Sync. exe que nunca sai se for lançado pelo aplicativo principal. Pode ser que o Sync. exe espere pelo recurso mantido pelo aplicativo principal, cabe a você investigar.
Sim, eu acho que vou ter que fazer mais algumas escavações.
Eu escrevi um programa de exemplo com um formulário com um botão ligado, quando o botão foi clicado, disparou Sync. exe e chamou WaitForExit () e tudo funcionou bem! Confuso!!
Pode ter algo a ver com o fato de que o código que chama o Sync. exe está em um thread separado, talvez? Vou postar de volta quando encontrar a resposta!
Essa fila é usada para o IPC enviar mensagens básicas do Sync. exe para o aplicativo de chamada principal. Essas mensagens são strings básicas, geralmente um caractere "c"; para completo, & quot; e & quot; para o erro "u" para uma atualização de software disponível etc.
Eu criar a fila apenas antes de chamar o aplicativo Sync. exe e algo nele parece manter o Sync. exe vivo, quando eu fechar o aplicativo principal Sync. exe fecha também.
Essa implementação funciona bem em um dispositivo CE 4.2, mas não no dispositivo WM5 que tenho aqui.
Alguma idéia de como eu poderia modificar o código para WM5, ou devo considerar o uso de MSMQ ou algo parecido?
Ok, apenas no caso de alguém estar lendo isso ... a história até agora.
Alterei o código da fila de mensagens para usar o OpenNetCF. WindowsCE. Messaging. P2PMessageQueue e ainda tenho o mesmo problema. O problema ocorre quando o aplicativo de chamada abre uma Fila nomeada, inicia o segundo aplicativo como um processo e chama WaitForExit. O segundo aplicativo abre a mesma fila nomeada e envia mensagens que são recebidas pelo aplicativo de chamada. No entanto, quando o segundo aplicativo termina, ele nunca é realmente fechado, fazendo com que o WaitForExit bloqueie o aplicativo de chamada. Se eu parar o aplicativo de chamada, os dois aplicativos serão fechados.
Isso só ocorre se eu usar a mesma fila nomeada em ambos os aplicativos. É como se eles estivessem ligados através da fila? Isso tudo funcionou bem no PPC2003 e no CE4.2, mas no WM5.0 está causando uma dor de cabeça real! Socorro!!
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:
Process. Start com. WaitForExit ()?
Process. Start com. WaitForExit ()?
Process. Start com. WaitForExit ()?
que precisa iniciar uma pequena operação, eu recebo erro.
RE: Process. Start com. WaitForExit ()?
RE: Process. Start com. WaitForExit ()?
RE: Process. Start com. WaitForExit ()?
Eu acho que há um FAQ por ca8msm (?) Que mostra como iniciar um processo. Também há a opção de ter as janelas ocultas. Dê uma busca.
RE: Process. Start com. WaitForExit ()?
psi. WorkingDirectory = "o diretório"
psi. FileName = "o nome do arquivo"
Red Flag enviado.
Obrigado por ajudar a manter o Tek-Tips Forums livre de postagens inapropriadas.
A equipe do Tek-Tips irá verificar isso e tomar as medidas apropriadas.
Responder a este tópico.
Postar nos fóruns do Tek-Tips é um recurso somente para membros.
Direitos autorais & copy; 1998-2018 engineering, Inc. Todos os direitos reservados.
Reprodução não autorizada ou vinculação proibida sem expressa permissão por escrito. O registro ou uso deste site constitui aceitação de nossa Política de Privacidade.
No comments:
Post a Comment