Waitforexit processstartinfo


Waitforexit processstartinfo
Resumo Especifica um conjunto de valores usados ​​ao iniciar um processo. Sintaxe C #:
Você pode usar a classe ProcessStartInfo para obter maior controle sobre o processo iniciado. Você deve definir pelo menos a propriedade ProcessStartInfo. FileName, manualmente ou usando o construtor. O nome do arquivo é qualquer aplicativo ou documento. Aqui, um documento é definido como qualquer tipo de arquivo que tenha uma ação aberta ou padrão associada a ele. Você pode ver os tipos de arquivos registrados e seus aplicativos associados ao seu computador usando a caixa de diálogo Opções de Pasta disponível no sistema operacional. O botão Avançado leva a uma caixa de diálogo que mostra se há uma ação aberta associada a um tipo de arquivo registrado específico.
Além disso, você pode definir outras propriedades que definem ações a serem executadas com esse arquivo. Você pode especificar um valor específico para o tipo da propriedade ProcessStartInfo. FileName para a propriedade System. Diagnostics. ProcessStartInfo. Verb (não suportada na CLI de origem compartilhada). Por exemplo, você pode especificar "imprimir" para um tipo de documento. Além disso, você pode especificar valores de propriedade ProcessStartInfo. Arguments para serem argumentos de linha de comando para passar para o procedimento aberto do arquivo. Por exemplo, se você especificar um aplicativo de editor de texto na propriedade ProcessStartInfo. FileName, poderá usar a propriedade ProcessStartInfo. Arguments para especificar um arquivo de texto a ser aberto pelo editor.
A entrada padrão geralmente é o teclado, e a saída padrão e o erro geralmente são a tela do monitor. No entanto, você pode usar as propriedades ProcessStartInfo. RedirectStandardInput, ProcessStartInfo. RedirectStandardOutput e ProcessStartInfo. RedirectStandardError para fazer com que o processo obtenha entrada ou retorne a saída para um arquivo ou outro dispositivo. Se você usar as propriedades Process. StandardInput, Process. StandardOutput ou Process. StandardError no componente Process, deverá primeiro definir o valor correspondente na propriedade ProcessStartInfo. Caso contrário, o sistema lançará uma exceção quando você ler ou gravar no fluxo.
Configure ProcessStartInfo. UseShellExecute para especificar se deve iniciar o processo usando o shell do sistema operacional.
Você pode alterar o valor de qualquer propriedade ProcessStartInfo até a hora em que o processo é iniciado. Depois de iniciar o processo, alterar esses valores não tem efeito.
Lista de Membros System. Diagnostics. ProcessStartInfo:
Inicializa uma nova instância da classe ProcessStartInfo sem especificar um nome de arquivo com o qual iniciar o processo.

Waitforexit processstartinfo
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!!

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.

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:

Como usar o Process. Start no Visual Basic.
Quando você precisa iniciar outro aplicativo usando o código VB.
O método Start do objeto Process é, possivelmente, uma das ferramentas mais subestimadas disponíveis para um programador. Como método, Start tem uma série de sobrecargas, que são conjuntos diferentes de parâmetros que determinam exatamente o que o método faz. As sobrecargas permitem que você especifique praticamente qualquer conjunto de parâmetros que você queira passar para outro processo quando for iniciado.
O que você pode fazer com o Process. Start é realmente limitado apenas pelos processos que você pode usar com ele.
Se você deseja exibir o arquivo Leia-me baseado em texto no Bloco de notas, é tão fácil quanto:
Isso pressupõe que o arquivo LeiaMe está na mesma pasta que o programa e que o Bloco de Notas é o aplicativo padrão para os tipos de arquivo. txt e está no caminho do ambiente do sistema.
Process. Start semelhante ao comando shell no VB6.
Para programadores familiarizados com o Visual Basic 6, Process. Start é um pouco como o comando VB 6 Shell. No VB 6, você usaria algo como:
Usando Process. Start.
Você pode usar esse código para iniciar o Bloco de Notas maximizado e criar um objeto ProcessStartInfo que possa ser usado para um controle mais preciso:
Iniciando um processo oculto.
Você pode até iniciar um processo oculto.
Mas tenha cuidado. A menos que você adicione mais código para encerrar o processo, provavelmente será necessário finalizá-lo no Gerenciador de tarefas. Normalmente, os processos ocultos são usados ​​apenas com processos que não possuem nenhum tipo de interface de usuário.
Recuperando o nome de um processo.
Trabalhar com Process. Start como um objeto lhe dá muita capacidade. Por exemplo, você pode recuperar o nome do processo que foi iniciado. Este código irá mostrar o & # 34; bloco de notas & # 34; na janela de saída:
Isso era algo que você não poderia fazer com o comando VB6 Shell porque ele lançava o novo aplicativo de forma assíncrona. Usando WaitForExit pode causar o problema inverso porque você tem que iniciar um processo em um novo segmento se você precisar que ele seja executado de forma assíncrona. Por exemplo, se você precisar que os componentes permaneçam ativos em um formulário em que um processo foi iniciado e WaitForExit foi executado. Normalmente, esses componentes não estarão ativos. Codifique e veja por si mesmo.
Uma maneira de forçar o processo a parar é usar o método Kill.
Esse código aguarda dez segundos e termina o processo.
Descobri que um atraso forçado era necessário para permitir que o processo fosse concluído para evitar um erro.
Na maioria dos casos, provavelmente é uma boa ideia colocar seu processamento em um bloco Using para garantir que os recursos usados ​​pelo processo sejam liberados.
Para tornar tudo isso ainda mais fácil de se trabalhar, há até mesmo um componente Process que você pode adicionar ao seu projeto para que você possa fazer muitas das coisas mostradas acima em tempo de design em vez de tempo de execução.
Uma das coisas que isso facilita muito é codificar eventos gerados pelo processo, como o evento quando o processo foi encerrado. Você também pode adicionar um manipulador usando um código como este:
Mas simplesmente selecionar o evento para o componente é muito mais fácil.

C # Process. WaitForExit () 与 死锁.
Tabelas de eco no nível 0:
Se existir, InstallScripts \ Create01.sql (
sqlplus% 1 /% 2 @% 3 @InstallScripts \ Create01.sql | % HideSQLPlusRows%
Se existir, InstallScripts \ Create02.sql (
而 了 两天 , , , 发现 原因 是 是 了 死锁 死锁 由于 标准 标准 输出 被 被 , 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 而 4) , , 而 而 而 而 而 而 而 而 而 而 的 的 的 的 的 的 的 的 的 的 的 的 上面 上面 上面 的 时候Clique aqui para ver o artigo cmd. exe Clique aqui para fazer o download do aplicativo, clique em C # App e clique no botão direito do mouse em WaitForExit () e clique no botão direito do mouse. , 最后 形成 死锁。
Tabelas de eco no nível 0:
Se existir, InstallScripts \ Create01.sql (
sqlplus% 1 /% 2 @% 3 @InstallScripts \ Create01.sql | % HideSQLPlusRows% & gt; Registros \ Create_% 1.txt.

Комментарии