Porque quando você inicia um processo indiretamente, você não obtém o objeto Processo (então, no processo do seu caso, é sempre nulo e a segunda linha lança uma exceção). Deixe-me explicar o que quero dizer com indiretamente. Se você não especificar um executável, mas você dá um documento (ou um recurso), então ele será executado através de um verbo de shell. Neste caso, um processo existente pode ser (re) usado. Nesses casos, Process. Start () retornará nulo. Crie um documento do Word vazio c: test. docx. Feche todas as instâncias do Word. Execute Process. Start (c: test. docx) Retorna uma instância de processo Execute Process. Start (c: test. docx) Retorna nulo Você pode simplesmente resolver este AFAIK que você não pode porque o Process usa ShellExecuteEx com uma estrutura SHELLEXECUTEINFO para iniciar o processo. Leitura da documentação SHELLEXECUTEINFO para o campo hProcess, você verá isso: Um identificador para o aplicativo recém-iniciado. Este membro é configurado no retorno e é sempre NULL, a menos que fMask esteja configurado para SEEMASKNOCLOSEPROCESS. Mesmo se fMask estiver configurado para SEEMASKNOCLOSEPROCESS, hProcess será NULL se nenhum processo foi iniciado. Por exemplo, se um documento a ser lançado for um URL e uma instância do Internet Explorer já estiver sendo executada, ele exibirá o documento. Nenhum novo processo é iniciado, e hProcess será NULL. Observação ShellExecuteEx nem sempre retorna um hProcess, mesmo que um processo seja iniciado como resultado da chamada. Por exemplo, um hProcess não retorna quando você usa SEEMASKINVOKEIDLIST para invocar IContextMenu. Observe se você está executando um novo processo apenas para abrir um URL e obter um arquivo gerado pelo lado do servidor, então você deve seguir a sugestão de Damiens e usar um WebClient. DownloadFile ().C (C Sharp) gtInvalidOperationException no Process. WaitForExit O requisito é detectar o fechamento De um documento de palavras aberto por um processo. Existe algum código que deve ser executado após o fechamento do documento. O documento Process. Start () é aberto, usei process. WaitForExit () para interromper a execução até o documento ser fechado. Mas uma vez que o documento está fechado, Process. WaitForExit () lança InvalidOperationException: nenhum processo está associado à exceção do objeto. Mesmo no processo de processamento processado. O processo de propriedade previsto. Espera a entrada (), a mesma exceção é lançada. Essa exceção é lançada durante a versão, bem como o modo Debug. Qualquer idéia de por que ocorreu esta exceção. No 6 de setembro, às 9h18, Sangeetha ltSangee. Discussões. microsoftgt escreveu: gt O requisito é detectar o fechamento de um documento de palavra aberto por um processo. Gt Existe algum código que deve ser executado após o documento ter sido fechado. Gt gt Usando Process. Start () o documento é aberto, eu usei process. WaitForExit () para gt parar a execução adicional até o documento ser fechado. Gt gt Mas uma vez que o documento está fechado, Process. WaitForExit () lança gt quotInvalidOperationException: nenhum processo está associado à exceção do objeto. Gt gt Mesmo no processo de processamento. O pacote de propriedade previsto. WaitForInputIdle (), a mesma exceção gt é lançada. Gt gt Esta exceção é lançada durante a versão, bem como o modo Debug. Gt gt Qualquer idéia de por que essa exceção ocorre. Eu não acho que você está esperando a variável de Processo correta. Certifique-se de não esquecer de atribuir o resultado de Process. Start () a uma variável do tipo Process. Processo p1 novo Processo () Processo p2 Process. Start (quotnotepad. exequot) p1.WaitForExit () lt-- lançará p2.WaitForExit () lt-- não lançará. ou. P1.StartInfo novo ProcessStartInfo (quotnotepad. exequot) p1.Start () p1.WaitForExit () lt-- não vai jogar
No comments:
Post a Comment