Tuesday 12 December 2017

Linha de comando c # process waitforexit


O problema Um colega de trabalho queria criar uma ferramenta em C que envolve a execução de um executável de linha de comando. Uma vez que uma API não está disponível para eles, eles pedem uma maneira rápida de lançar um executável de linha de comando com a opção de analisar através da saída padrão. A Solução Minha solução para eles que lhes permitirá: Iniciar uma linha de comando executável com argumentos Ter a opção de recuperar Saída Padrão Ter a opção de recuperar Erro Padrão Tem a opção de lançar exceção em Erro Padrão Encaminhar todas as exceções (ex: executável não Não existir) A solução é uma única função estática que usa a classe System. Diagnostic. Process para executar a execução 1. O nome executável e os argumentos são alimentados na propriedade Process. StartInfo como um objeto System. Diagnostic. ProcessStartInfo 23. Nós Quer definir o Process. StartInfo. UseShellExecute como false, uma vez que queremos a opção para recuperar a saída padrão eo erro padrão 4. Saída padrão e erro padrão podem ser redirecionados com Process. StartInfo. RedirectStandardOutput e Process. StartInfo. RedirectStandardOutput respectivamente, que nós Irá ligar ou desligar com flags56. Finalmente, no caso em que estamos lendo o Process. StandardOutput ou Process. StandardOutput. Precisamos de invocar o método Process. WaitForExit 678. A Implementação O Exemplar 07 Aug 2009 K, o código abaixo é uma bagunça completa desde ive sido mexer com ele para tentar e obtê-lo para executar os comandos mais simples em um prompt de comando. Mas se você olhar para o fundo você verá todas as minhas últimas tentativas de fazê-lo funcionar, o resto do código é comentado para a maior parte. Eu olhei ao redor na internet, tentei algumas maneiras diferentes que você não pode ver aqui, mas eu não tenho ainda. O que faz Este programa tenta montar um arquivo criptografado usando um arquivo de lista de palavras e truecrypt. Esqueci minha senha e já construí um gerador de listas de palavras personalizado que acho que deve ser capaz de gerar a senha. Combina arrays, IE primeira parte poderia ser, isto isto ou esta segunda parte poderia ser, isto isto ou isto e vai um, tomando as variáveis, então gera todas as combinações possíveis. Eu só preciso disso para aplicá-lo. Eu pensei que isso ia demorar 20 minutos para escrever eu não consigo descobrir como ele funciona, mesmo depois de olhar para os exemplos online. Editado por serpant, 07 de Agosto de 2009 - 05:21. Esqueci código tags Parabola 07 Ago 2009 Parabola 07 Ago 2009 serpant 07 Aug 2009 Sim, isso faz muito sentido Eu estava pensando que eu não seria capaz de enviar a passagem eo argumento como uma opção por algum motivo. Obrigado. Vou tentar agora. Im ainda curiosidades de por que o método que eu estava tentando usar não funcionaria. IE enviar string string argumento diretamente para process. start (). Mas espero que isso funcione, post post. Serpant 07 Aug 2009 Este método inicia o programa no modo GUI tudo configurado com as variáveis. Eu acho que eu poderia ter tentado algo como isso antes. Eu realmente preciso para iniciar um console, em seguida, executar os comandos nele. Porque se eu executar truecrypt, em seguida, as opções que você vê no código acima irá montar se o seu direito e não fazer nada se o seu erro (no prompt de comando). No modo GUI, tudo é clicado. Eu não quero apenas iniciar o programa, eu quero controlar e executar o prompt de comando do meu programa. Espero que isso explique o que eu preciso de mais. Obrigado pela ajuda. Eu pensei que eu tinha lá por um segundo. Eu olhei para maneiras de fazer isso, e enviando uma string string process. start (), parece ser uma opção válida. Eu tentei isso, eu acredito que uma vez já E isso é o que eu passei mais do meu esforço tentando descobrir Parabola 07 Aug 2009 sim, o programa no link faz GUI, mas o código que enviei como você pode ver que eu modifiquei. Você poderia facilmente fazer um console. Readline () para obter comandos a partir do console. Quando eu corri o script, ele correu sem GUI, apenas executou o programa que foi codificado para ele. Eu copiei seu código, que era praticamente o mesmo que algumas coisas que eu tentei antes. Ele não montar nada, porém, mas se eu apenas copiar as opções para a direita do VisualStudios e executá-lo em um prompt de comando, ele faz. Eu notei isso antes, é por isso que eu tenho tentado descobrir como executar coisas no CMD. exe. O que eu vi são alguns web sties que dizem que você pode fazer isso Process. Start (CMD. exe, coisas de linha de comando que você deseja executar aqui) seu parece tão simples, mas não está funcionando Estes fóruns não são um animado como costumavam ser , Eh Última vez quando eu pedi ajuda no meu jogo RPG. Havia um bando de pessoas com idéias. Obrigado por tentar parábola. Eu vou tentar descobrir um pouco mais tarde, então eu poderia tentar outro fórum, ele só foi eu e você neste um para mais de um dia. Id como um mais ativo, você sabe qualquer Parabola 08 Aug 2009 Eu ainda não acho que você está recebendo bastante. Process. Start (CMD. exe, linha de comando coisas que você deseja executar aqui) Você deve estar tentando executar CMD. exe com args. Realmente executar sua linha em vez disso. Por exemplo, Ou NÃO Pense nisso - cmd é apenas linha de comando. Não é o programa real que você quer executar, é por isso, por que tentar chamar um programa, em seguida, em que os argumentos de programas, chamar outro, com mais argumentos para o segundo Seu ineficaz. Basta ligar para o seu programa em linha reta, como este: serpant 08 Aug 2009 O que eu estava dizendo, é que eu tentei o seu código, e ele não funciona. Ele apenas inicia o programa e não tenta montar o arquivo. Eu tentei várias vezes. Não tenho certeza por que não funciona. Se eu fosse para executar truecrypt em uma linha de comando com as mesmas opções, então ele montar o arquivo. É por isso que estou tentando fazer do jeito que eu sou. Seu caminho seria bom se funcionasse. Não tenho certeza se seria muito mais eficiente embora. Uma vez que o truecypt está em execução, operá-lo a partir da linha de comando não vai iniciar o programa novamente, ele vai apenas tentar montar a unidade. Então, fazê-lo a sua maneira, se ele funcionou, seria começar truecrypt algumas centenas de vezes não seria Este código vai ser parte de um loop com a seção de senha mudando cada time. Process. WaitForExit Method () WaitForExit () faz com que o thread atual aguarde até que o processo associado termine. Ele deve ser chamado depois que todos os outros métodos são chamados no processo. Para evitar bloquear o thread atual, use o evento Exited. Este método instrui o componente de processo para aguardar uma quantidade infinita de tempo para o processo e manipuladores de eventos para sair. Isso pode causar um aplicativo para parar 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 escrito para nunca inserir seu loop de mensagem. No. NET Framework 3.5 e versões anteriores, a sobrecarga WaitForExit () aguardou milissegundos MaxValue (aproximadamente 24 dias), não indefinidamente. Além disso, versões anteriores não aguardar os manipuladores de eventos para sair se o tempo máximo MaxValue foi atingido. Essa sobrecarga garante que todo o processamento foi concluído, incluindo o tratamento de eventos assíncronos para a 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. Quando um processo associado sai (isto é, quando é desligado pelo sistema de operação através de uma terminação normal ou anormal), o sistema armazena informações administrativas sobre o processo e retorna ao componente que tinha chamado WaitForExit (). 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 para um recurso de processo existente. Em vez disso, o identificador pode ser usado apenas para acessar os sistemas operacionais informações sobre o recurso de processo. O sistema está ciente de alças para processos encerrados que não foram liberados pelos componentes do processo, portanto, mantém as informações ExitTime e Handle na memória até que o componente Process libera especificamente os recursos. Por esse motivo, sempre que você chama Iniciar para uma instância Process, chame Close quando o processo associado tiver terminado e você não precisa mais nenhuma informação administrativa sobre ele. Fechar libera a memória alocada para o processo encerrado.

No comments:

Post a Comment