К основному контенту

Process waitforexit não funciona


Process. waitforexit não funciona
Eu estou adicionando ação personalizada no meu projeto de instalação VS2008 (instalador MSI).
Eu estou chamando um arquivo de lote para criar banco de dados e deseja excluir esses arquivos depois. Eu tenho WaitForExit (), mas não vai esperar. Por quê?
nenhuma diferença com startInfo. UseShellExecute = true; O lote foi executado sem nenhum problema porque requer entrada do usuário e eu insiro y e n para perguntas. mas essa ação de exclusão aconteceu antes da minha entrada. E eu tenho uma pausa no final do arquivo de lote. Eu posso assistir o processo do arquivo em lote.
EDIT: eu testei mais de 10 vezes, não funcionou. Depois do almoço, coloquei mais um waitForExit e um loop while com a verificação HasExited. ele vai dormir dentro do loop while. Eu achei que funcionou. Então eu apaguei o código extra, de volta para um WaitForExit. Parece trabalho agora.

Process. waitforexit não funciona
Eu tenho programa pro1.exe que lê a partir do arquivo de entrada, calcula o resultado e escreve-o no arquivo de saída. Agora estou escrevendo o programa test. exe, que o testa em testes diferentes (preenche entrada, executa pro1 usando Process. Start () e compara a saída com o suposto)
O problema é o seguinte: depois de executar o arquivo de saída pro1.exe está vazio. No entanto, se eu executar manualmente, ele grava no arquivo de saída.
Aqui está o código como eu executo pro1:
_applicationName é um caminho completo para o arquivo exe.
no debug eu vejo, esse processo está começando e terminando sem erros.

Process. waitforexit não funciona
Eu estou escrevendo um programa que inicia um número desconhecido de processos em seqüência usando myProcess. Start () e myProcess. WaitForExit ().
O problema parece ser que alguns processos podem iniciar outros processos e, em seguida, sair, fazendo com que meu programa continue sem que o processo iniciado realmente conclua sua tarefa. Existe alguma maneira de monitorar esses "subprocessos"?
Desde já, obrigado.
Edit: Depois de alguns testes adicionais, descobri que o mesmo problema ocorre quando, por exemplo, iniciando o Winword. exe. WaitForExit simplesmente não funciona com alguns aplicativos.
Tom escreveu sobre o mesmo problema neste tópico.
mas ele ficou satisfeito quando funcionou em um computador diferente.
Parece que um processo & quot; WINWORD. EXE & quot; já está em execução na minha máquina. Possivelmente porque eu uso o Word como editor de e-mail (?). Fechando isso antes de executar meu programa (que está configurado para iniciar a palavra e esperar que ele saia) & quot; resolve & quot; o problema. No entanto, não posso supor que o winword não esteja em execução quando meu programa for iniciado.
Não, não há muito que você possa fazer de forma confiável. O problema é que, quando você chama WaitForExit, o aplicativo pode já ter iniciado outro aplicativo e ter saído; não há como saber se esse aplicativo gerou outros nesse ponto.
É a natureza do Process. Start. Você não está descobrindo que WaitForExit aguarda indefinidamente porque o processo chegou e se foi antes de você ligar, você está?
Bem, cria um novo processo, é tão rápido que pode não aparecer no Process Explorer. Tudo o que o Process. Start faz é solicitar que o processo seja iniciado; Não há nada mais que o novo processo seja necessário. Se não quiser ficar na memória, é sua escolha. Não há nada que você possa fazer sobre isso, infelizmente.
Algumas aplicações sempre iniciam um novo processo. Quando você abre um arquivo SLN do Visual Studio, por exemplo, ele sempre inicia dois processos. Há um pequeno aplicativo que verifica o tipo do arquivo SLN e, em seguida, abre uma versão apropriada do Visual Studio porque você só pode associar um aplicativo por extensão.

Process. waitforexit não funciona
MVP da Microsoft (Visual Basic)
Oi tudo, desculpe tarde!
porque no Word 2007, process. WaitForExit () bloqueando até que o documento do Word saia ou feche, mas na palavra 2010 e superior o código acima não bloqueia!
Alguém pode ter uma maneira alternativa de contornar este problema?
desde já, obrigado.
Eu dei um acima (com GetClassName () e GetWindowText () no retorno de chamada para identificar a janela)
(testado no Windows 10)
Alguém pode ter uma maneira alternativa de contornar este problema?
Eu dei um acima (com GetClassName () e GetWindowText () no retorno de chamada para identificar a janela)
(testado no Windows 10)
Você pode dar um exemplo completo de como realizar essa tarefa?
desde já, obrigado.
Você pode dar um exemplo completo de como realizar essa tarefa?
O teste que fiz com um arquivo & quot; c: \ test. docx & quot; e Winword 2016.
Para testar, eu apenas chamo Beep () quando a janela não é encontrada:
Eu realmente acho que o modelo de objeto é mais fácil e é a solução suportada. O seguinte funciona para mim.
Eu realmente acho que o modelo de objeto é mais fácil e é a solução suportada. O seguinte funciona para mim.
Quase esse código funciona! mas eu estou procurando por um evento quando o aplicativo de palavra foi encerrado (porque, após a saída, eu estou excluindo o arquivo temporário)!
Você tem alguma ideia para realizar essa tarefa?
Desde já, obrigado.
Quase esse código funciona! mas eu estou procurando por um evento quando o aplicativo de palavra foi encerrado (porque, após a saída, eu estou excluindo o arquivo temporário)!
Você tem alguma ideia para realizar essa tarefa?
Primeiro, parece que você deveria estar usando um controle para incorporar o Office ao seu programa. Eu não sei os detalhes disso, mas se fosse para satisfazer suas necessidades, então seria mais fácil.
Tem certeza de que deseja fazer a exclusão na saída do aplicativo? Meu palpite é que você quer fazer isso quando o documento é fechado. Se o usuário tiver outros documentos abertos, pode levar horas até que o Word finalmente saia. Então provavelmente o evento Document. CloseEvent é o que você quer. É provavelmente seguro excluir o documento após o fechamento.
A má notícia sobre o uso dos modelos de objeto do Office é que é difícil encontrar a documentação. Pelo menos é para mim. Por um lado, a Microsoft parece querer que façamos tudo apenas com um add-in, mas o que você está fazendo não é um add-in. Você não precisa criar um suplemento e não deseja criar um suplemento para isso. Estou apenas dizendo que é difícil encontrar documentação e amostras relevantes. Depois de encontrá-los, é mais fácil a partir daí.

Process. waitforexit não funciona
Dentro de um aplicativo que estou escrevendo, preciso fazer o seguinte:
Execute um aplicativo GUI externo (para os propósitos deste exemplo, vamos assumir o seu MS Word). Bloqueie o encadeamento atual até que o aplicativo GUI externo tenha sido fechado.
Minha primeira tentativa de fazer isso foi fazer uso do objeto System. Diagnostics. Process.
// Inicialize o objeto de processo.
myProcess. StartInfo. FileName = & quot; C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 \\ Winword. exe & quot ;;
myProcess. StartInfo. WorkingDirectory = & quot; C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 & quot ;;
// Inicie o processo e espere que ele seja fechado.
System. Windows. Forms. MessageBox. Show (& quot; Aplicativo do usuário fechado & quot;);
Quando executo o código acima, o MS Word é iniciado conforme o esperado. No entanto, a chamada WaitForExit () não parece estar fazendo seu trabalho como eu obter o instantâneo de caixa de mensagem instantaneamente após o processo do MS Word é iniciado e não depois que ele for fechado.
Por que a chamada WaitForExit () não aguarda o término do processo do MSWord? O fato de eu estar lançando um aplicativo GUI em vez de um aplicativo de linha de comando é significativo?
Qualquer ajuda seria muito apreciada.
Todas as respostas.
Depois de alguns testes conclui que é porque não há um documento do usuário carregado. se você tornar o parâmetro filename um documento real, tudo funcionará como esperado:
// Inicie o processo e espere que ele seja fechado.
System. Windows. Forms. MessageBox. Show (& quot; Aplicativo do usuário fechado & quot;);
Se um documento é carregado ou não, não importa? O objeto Process fornece apenas uma maneira genérica de executar e monitorar processos, ele não sabe nada sobre as partes internas do que o Word carregou com segurança?
Em qualquer caso, tentei o código conforme recomendado e recebi uma exceção "Nenhum processo associado a este objeto", presumivelmente porque foi passado o nome do arquivo de um documento em vez de um executável.

Комментарии

Популярные сообщения из этого блога

Kelas forex di kelantan

Kelas Belajar Forex. Di sini e a diajar secara percuma bagaimana urusniaga forex dijalankan secara asas. Jom Belajar Forex. 2) Pilih treinador de fundo itu sendiri. Forex terlalu teknikal e carlah di kalangan mera yang mempunyai kelayakkan teknikal yang kukuh kerana kebanyakkan formadores hanya mengambil kesempatan di atas comerciantes-comerciantes baru yang tidak memahami hukum-hakam forex. 3) Sebelum belajar, tanya dahulu pada trainers tersebut samada ia ada mengajar cara meletak stop loss atau tidak. Perl diketahui kerana ramai t rader rugi kerana memahami cara cara para meletakkan stop loss atau cara membuat pengiraan stop loss itu sendiri. 4) Cari treinador yg mambu mengajar jika berlaku mercado reverso, kita masih membuat keuntungan e ini adalah final dalam dunia forex kerana kebanyakkan teknik tidak menepati ciri-ciri ini. Di sini saya sycanan and menggunakan broker Instaforex yang berdaftar di Rússia dan download plataforma Metatrader4 seperti di bawah .. Baixar Trading Platfor...