Saturday 13 January 2018

Useshellexecute waitforexit vb


Elina: obrigado pela sua resposta. Há algumas notas na parte inferior deste MSDN doc (msdn. microsoften-uslibraryhellip) que alertam sobre potenciais bloqueios se você ler ao final de ambos os fluxos stdout e stderr redirecionados de forma síncrona. É difícil dizer se sua solução é suscetível a esse problema. Além disso, parece que você está enviando o process39 stdoutstderr output novamente na entrada. Por quê. ) Ndash Matthew Piatt 26 de setembro 16 às 4:42 Esta é uma solução baseada em Biblioteca de Tarefas Paralelas (TPL), mais moderna, para. NET 4.5 e acima. Exemplo de uso Implementação respondida 5 de outubro 16 às 10:54 Eu acho que isso é uma abordagem simples e melhor (não precisamos de AutoResetEvent): respondido 14 de junho 12 às 14:29 Verdadeiro, mas não deveria estar fazendo. FileName Path quotggsci. exequot quot lt Obeycommand. txtquot para simplificar o seu código também Ou talvez algo equivalente a quotggsci. exequot do quot do comando quotecho se você realmente não quiser usar um arquivo obeycommand. txt separado. Ndash Amit Naidu Jun 4 13 at 22:03 Sua solução não precisa de AutoResetEvent, mas você pesquisa. Quando você faz uma pesquisa em vez de usar o evento (quando está disponível), você está usando a CPU sem motivo e isso indica que você é um programador ruim. Sua solução é realmente ruim quando comparada com a outra usando AutoResetEvent. (Mas não te dou -1 porque voce tentou ajudar). Ndash Eric Ouellet Nov 7 14 às 18:38 Eu estava tendo o mesmo problema, mas a razão era diferente. No entanto, isso aconteceria no Windows 8, mas não no Windows 7. A seguinte linha parece ter causado o problema. A solução era NÃO desativar UseShellExecute. Agora recebi uma janela popup do Shell, que é indesejável, mas muito melhor do que o programa esperando que nada de particular aconteça. Então eu adicionei o seguinte trabalho para isso: agora, o único problema que me incomoda é o porquê isso está acontecendo no Windows 8, em primeiro lugar. Respondeu 13 de janeiro 15 às 10:35 Tentei fazer uma aula que resolva seu problema usando a leitura de fluxo assíncrono, levando em conta Mark Byers, Rob, Stevejay responde. Ao fazê-lo, percebi que existe um bug relacionado à leitura assíncrona do fluxo de saída do processo. Você não pode fazer isso: você receberá System. InvalidOperationException. StandardOut não foi redirecionado ou o processo ainda não começou. Então, você deve iniciar a saída assíncrona lida depois que o processo for iniciado: fazendo isso, faça uma condição de corrida porque o fluxo de saída pode receber dados antes de configurá-lo como assíncrono: então, algumas pessoas podem dizer que você só precisa ler o fluxo antes de você Configure-o para assíncrono. Mas o mesmo problema ocorre. Haverá uma condição de corrida entre a leitura síncrona e configurará o fluxo em modo assíncrono. Não há como obter uma leitura assíncrona segura de um fluxo de saída de um processo da maneira atual Process e ProcessStartInfo foi projetado. Você provavelmente está melhor usando a leitura assíncrona, como sugerido por outros usuários para o seu caso. Mas você deve estar ciente de que você pode perder algumas informações devido à condição de corrida. Por favor, ajude aqui estou preso com este problema, onde eu estou tentando o fogo o cmd. exe para executar uma tarefa, mas o arquivo cmd. exe precisa ser iniciado com Direitos de administrador e eu não estive o arquivo a ser escondido e mesmo se eu definir as propriedades do processo ProcessWindowStyle. Hidden. Como posso executar o processo com o direito de administrador e também esconder a janela, porque no instante em que eu configurei UseShellExecute True e comente o nome e a senha do usuário do que esconde a janela. A partir do que posso reunir é que, uma vez que você define UseShellExecute falso, o código não esconde a janela. Veja meu exemplo de código abaixo e realmente ajudaria se alguns pudessem me mostrar como iniciar os processos com o direito de administração e manter a janela escondida. Sexta-feira, 27 de agosto de 2018 2:19 PM Obrigado pela sua postagem. Apenas uma reflexão rápida, que tal fazer um processo de lançamento de 2 passos como uma solução alternativa Código da Etapa 1: Defina o UserShellExecute falso para usar o verbo do runas. Código da Etapa 2: Configure o UserShellExecute true para ocultar a janela. Esta solução alternativa funciona para console e aplicativo do Windows. A seguinte informação ajudaria você a descobrir a relação entre o UseShellExecute. CreateNoWindow. UserNamePassword e configurações WindowStyle. 1. De acordo com aqui. Quot Se as propriedades UserName e Password não forem nulas, o valor da propriedade CreateNoWindow será ignorado e uma nova janela será criada. 2. Segundo aqui. Quot UseShellExecute deve ser falso se a propriedade UserName não for nula ou uma string vazia, ou uma InvalidOperationException será lançada quando o método Process. Start (ProcessStartInfo) for chamado quot. 3. Se definimos UseShellExecute true para iniciar um processo através do shell, é o shell que decidirá como iniciar o processo, o sinalizador CreateNoWindow não terá efeito. 4. Se definirmos UseShellExecute falso. A propriedade WindowStyle não terá efeito. Algumas informações úteis. Marque a resposta correta no momento certo. Obrigado, Sam Edited por SamAgain segunda-feira, 30 de agosto de 2018 5:58 am refinar Marcado como resposta por ETS Terça, 31 de agosto de 2018 8:18 AM Eu tive a mesma experiência com UseShellExecute False. Você já tentou usar o StartInfo. CreateNoWindow também, eu também li pessoas dizendo que isso funciona para aplicativos de console, mas não outros aplicativos que desencadeiam sua própria janela e ignoram o parâmetro dizendo para ocultar (netframeworkdevnet-base-class-libraryhow-to-run - A-process-in-background-without-any-windows-10258.shtml). Imagino que, desde a configuração do UseShellExecute para falso, a entrada e a saída serão redirecionadas para o seu processo, eles assumem que você não gostaria de ocultar a janela, mas não sei. É uma situação difícil. Sexta-feira, 27 de agosto de 2018 18:23 Obrigado pela sua postagem. Apenas uma reflexão rápida, que tal fazer um processo de lançamento de 2 passos como uma solução alternativa Código da Etapa 1: Defina o UserShellExecute falso para usar o verbo do runas. Código da Etapa 2: Configure o UserShellExecute true para ocultar a janela. Esta solução alternativa funciona para console e aplicativo do Windows. A seguinte informação ajudaria você a descobrir a relação entre o UseShellExecute. CreateNoWindow. UserNamePassword e configurações WindowStyle. 1. De acordo com aqui. Quot Se as propriedades UserName e Password não forem nulas, o valor da propriedade CreateNoWindow será ignorado e uma nova janela será criada. 2. Segundo aqui. Quot UseShellExecute deve ser falso se a propriedade UserName não for nula ou uma string vazia, ou uma InvalidOperationException será lançada quando o método Process. Start (ProcessStartInfo) for chamado quot. 3. Se definimos UseShellExecute true para iniciar um processo através do shell, é o shell que decidirá como iniciar o processo, o sinalizador CreateNoWindow não terá efeito. 4. Se definirmos UseShellExecute falso. A propriedade WindowStyle não terá efeito. Algumas informações úteis. Marque a resposta correta no momento certo. Obrigado, Sam Edited por SamAgain segunda-feira, 30 de agosto de 2018 5:58 am refinar Marcado como resposta por ETS Terça, 31 de agosto de 2018 8:18 AM O detalhe interno é que UseShellExecute usa (é claro) a API Win32 ShellExecuteEx, então você Pode ver os documentos para isso e ver o que está acontecendo. Basicamente, é como se você clicou duas vezes no exe. Então, você não obteria privilégios copiados para o novo processo, e isso levaria uma caixa de diálogo de elevação, se necessário. Se UseShellExecute for falso, você obtém a API Win32 CreateProcess, e isso herdará os privilégios de processo atuais. Cita um novo processo e seu tópico principal. O novo processo é executado no contexto de segurança do processo de chamada para citar os documentos. E assim não mostrará um diálogo de elevação, apenas para citar um exemplo de comportamento diferente. Phil Wilson quarta-feira, 01 de setembro de 2018 23:06 A Microsoft está realizando uma pesquisa on-line para entender sua opinião sobre o site da Msdn. Se você optar por participar, a pesquisa on-line será apresentada quando você deixar o site Msdn. Você gostaria de participar

No comments:

Post a Comment