Friday 4 August 2017

Waitforexit Process Powershell


Estou tentando executar um programa do PowerShell, aguarde a saída, em seguida, obter acesso ao ExitCode, mas não ter muita sorte. Eu não quero usar - Wait com Start-Process, como eu preciso de algum processamento para continuar em segundo plano. Heres um script de teste simplificado: Executar este script fará com que o bloco de notas seja iniciado. Depois que este for fechado manualmente, o código de saída será impresso, e ele será iniciado novamente, sem usar - wait. Nenhum ExitCode é fornecido quando isso é sair: Eu preciso ser capaz de executar o processamento adicional entre iniciar o programa e à espera dele sair, então eu não posso fazer uso de - Wait. Qualquer ideia de como eu posso fazer isso e ainda ter acesso à propriedade. ExitCode a partir deste processo solicitado 21 de abril às 19: 23Lets ler o que MSDN diz sobre ele: A sobrecarga WaitForExit () () () é usado para fazer o thread atual Aguarde até que o processo associado termine. Este método instrui o componente de processo para aguardar uma quantidade infinita de tempo para o processo 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. 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. Isso é claro para. NET. O que faz você pensar que ele não espera o processo Note para terminar Quais são os sinais de que O que é a prova Sexta-feira, 20 de fevereiro de 2009 20:13 Não tenho certeza se isso mudou recentemente, mas de volta no dia aplicações na janela Móvel nunca realmente fechado quando você bateu o X para fechá-los, eles apenas minimizar e continuar funcionando em segundo plano (este não era um bug, era uma característica, desde a próxima vez que você iniciar o aplicativo seria iniciado muito rápido, yah Eu sei, insano, mas verdadeiro) para que poderia ser por isso WaitForExit é talvez se comportando estranhamente e esperando para a inicialização do aplicativo em vez de sair. Mas, novamente, é apenas especulação baseada em knowlegde de versões antigas do Windows Mobile. Sexta-feira, fevereiro 20, 2009 11:03 PM Id gostaria de colidir esta pergunta. Estou no Windows Mobile 6 Standard e estou tentando gerar uma instância do navegador. Eu gostaria de esperar até o usuário fechar o navegador. Mas WaitForExit retorna extremamente rápido. Aqui está o código: Processo p novo Process () p. StartInfo. Arguments quotexample-sitequot p. StartInfo. Verb quotOpenquot p. StartInfo. UseShellExecute falso p. StartInfo. FileName quotIExplore. exequot p. Start () p. WaitForExit () MessageBox. Show (quotNow o navegador deve ser closedquot) Qual deve ser o caminho certo para obter os resultados esperados Segunda-feira, 08 de junho de 2009 22:45 Onde está o símbolo. símbolo. AlexB terça-feira, 09 de junho de 2009 21:58 Im vendo o mesmo problema, mas no XP. Eu acho que a prova pode ser visto em qualquer depurador (como estou vendo), ou em qualquer aplicativo de console (não necessariamente no Mobile) Excepto que você não, em seguida, obter um objeto de processo que você pode usar. Se você tentar Dim myProc como novo processo () myProc Process. Start (quotiexplorandoquot, quotfinance. yahoo/q/hpsquot símbolo) myProc. WaitForExit () ele ainda retorna imediatamente. Quarta-feira, 02 de setembro de 2009 20:48 Problema é que você não está iniciando uma nova instância de iexplore. exe. Você está apenas criando uma nova janela sobre o processo existente. Meu palpite é iexplore. exe começa, vê uma instância anterior e se comunica com a instância anterior para que ela abra a nova janela e, em seguida, esta instância que você iniciou saídas imediatamente. Portanto, o comportamento é correto e esperado. Blog. voidnish quarta-feira, 2 de setembro de 2009 20:52 Microsoft está conduzindo uma pesquisa on-line para entender sua opinião sobre o site Msdn. Se você optar por participar, a pesquisa on-line será apresentada a você quando você deixar o site Msdn. Gostaria de participar Processos de Gerenciamento no PowerShell Várias pessoas perguntaram recentemente sobre como gerenciar processos no PowerShell. Esta postagem no blog deve responder a algumas dessas perguntas. Como se poderia esperar da parte 8220shell8221 do PowerShell, você não precisa fazer nada especial para iniciar um processo. Em uma linguagem de programação como VBScript, você tem que fazer algo bastante complexo como: strComputer 8220.8221 Set objWMIService GetObject (8220winmgmts: 8221 amp 8220 8221 amp strComputer amp 8220rootcimv28221) Set objStartup objWMIService. Get (8220Win32ProcessStartup8221) Set objConfig objStartup. SpawnInstance Set objProcess GetObject (8220winmgmts: rootcimv2: Win32Process8221) objProcess. Create 8220Notepad. exe8221, Null, objConfig, intProcessID mas em conchas (PowerShell, cmd. exe, festança, etc.) você pode simplesmente começar um programa como o bloco de notas simplesmente digitando 8220notepad8221 como mostrado. Agora, observe que ao fazer isso o shell retorna imediatamente e solicita o próximo comando. Isso ocorre porque o bloco de notas é um processo GUI win32 e é executado em segundo plano. Por outro lado, se você iniciar um aplicativo de console como 8220ping. exe8221, o PowerShell aguardará até que o processo seja concluído. Mas e se eu quiser esperar pelo processo Win32 Em cmd. exe, you8217d fazer isso com 8220start / wait8221, mas este comando não está (diretamente) disponível no PowerShell. Então, o que fazemos O PowerShell executa diretamente executáveis. Se espera o processo para sair, o código de saída será deixado em LASTEXITCODE. Agora, se um executável do Win32 for o último comando de um pipeline e não for redirecionado, o processo será executado em segundo plano. No entanto, se você canalizar sua saída para algo, então o PowerShell aguardará o comando para sair. Portanto, esta é uma espera simples (se não intuitiva) para aguardar um processo de GUI para sair. Como alternativa, se o processo já estiver em execução, você pode usar o Get-Process para obter as informações necessárias e, em seguida, fazer um WaitForExit () nesse objeto. Aqui está um exemplo um pouco mais sofisticado onde abrimos um documento em vez de iniciar um processo. Desta vez we8217ll encontrar o processo pelo título da janela em vez de pelo nome do executável Infelizmente procurar por um processo sempre significa que você pode encontrar o processo errado. Idealmente, você gostaria de obter o objeto Processar diretamente. Assim, para um gerenciamento de processos mais preciso, você precisará usar a classe. NET System. Diagnostics. Process e iniciar os processos por conta própria. Por exemplo, você pode usar diagnostics. process :: Start () para aguardar um processo: Observe o uso de 8220pwdfoo. txt8221 para especificar o caminho completo para o arquivo. Isso ocorre porque o PowerShell mantém sua própria idéia do diretório atual. (Esta nota aplica-se ao uso de qualquer API. NET que acesse o sistema de arquivos que você precisa para dar-lhe um caminho absoluto.) Agora we8217re começando a voltar ao nível de complexidade que você encontrar em uma linguagem de programação. No entanto, você também tem todo o poder dessas línguas. Here8217s um script de exemplo 8220background. ps18221 que permitirá que você execute um scriptblock destacado em uma janela separada (ou na mesma janela se você especificar o parâmetro inconsole. Este script let8217s você fazer coisas no PowerShell que você pode fazer de cmd. exe, mas pode Fazer a partir do VBScript Finalmente, aqui estão duas outras maneiras de trabalhar com processos. Mesmo que o PowerShell doesn8217t têm um comando de início, cmd. exe faz isso você pode fazer um start / wait por fazer E, por último mas não menos importante, o PowerShell Community Extensions Inclui um cmdlets Start-Process. Você pode obter uma lista desses recursos em: Bruce Payette MSFT

No comments:

Post a Comment