Friday 17 November 2017

Wmi C # Process Waitforexit


- Crie um Processo Remoto via WMI e espere que ele saia do I039m usando System. Management para iniciar um processo em um alvo remoto via WMI como este: InputParameters (quotCommandLinequot) quotexecutable herequot OutputParameters ManagementClass. InvokeMethod (quotCreatequot, InputParameters, Nothing) Isso dispara O processo e o meu código continuam a ser executados, mas preciso de uma maneira de monitorar esse processo e de não fazer nada até que ele termine. Existe uma solução simples I039m na expectativa de que algo parecido com o Process. WaitForExit como ocorre quando se cria um processo local. I039m tendo um problema com o uso do processo system. diagnostic. Basicamente, não consigo obter o myProcess. WaitForExit para funcionar. Eu continuo recebendo um erro dizendo que quotNo processo está associado a este objeto. quot. Eu não tenho certeza do que o I039m está fazendo de errado. O que eu quero saber é se há uma maneira de NÃO aguardar um processo ao usar a representação. Não há sobrecargas para que eu não tenha certeza de como fazer isso. Sempre aguarda a saída para continuar Impersonation. RunProcess (someProcessPath) A razão pela qual eu quero fazer isso é que eu tenho um aplicativo de execução longo que processa arquivos grandes, mas eu quero entregar uma resposta de sucesso ao cliente que o processo começou antes de dirigir Eles para uma página de status. Eu não posso executar o processo com um processo normal. Inicialize () porque o IUSER precisa representar uma conta de usuário elevada. I039ve até tentou usar process. StartInfo após Impersonation. Login () e fornecendo um unpass, mas acho que o status de inquérito quotlogged é Parte da classe de representação estática somente. Se (Impersonation. Logon (LoginCredentials. UserName, LoginCredentials. Password)) isso falha com um código de saída de privilégios inválidos eu tenho um programa que executa um comando cmd. O meu problema é que eu quero que o programa aguarde até que o processamento do cmd finaliza, em seguida, fecha a interface do usuário do cmd. Código I039m com problemas com uma barra de progresso. I039ve criado uma barra de progresso que lê variáveis ​​de registro e usa essa entrada para atualizar a barra de progresso e algumas mensagens de status (para que eu possa chamá-lo de vbscripts, etc.). Eu quero isso quando minha barra de status atinge 100, a barra pára, aguarda alguns segundos e depois sai. No entanto, parece que o programa processa o código restante e encerra o aplicativo antes que ele tenha tempo para repintar completamente a barra de progresso (I039m adivinhando isso porque geralmente será atualizado para cerca de 10 antes de sair). I039m usando algo assim. Se prcnt 100 Então progbar. Style ProgressBarStyle. Blocks progbar. Value 0 Gostaria de ZIP um arquivo com VB. O código a seguir do URL de código I039m executando um processo remoto usando WMI e gostaria de redirecionar o StandardOutput desse processo de volta ao meu programa. Eu encontrei esses exemplos de código: estou lutando muito com esse código que estou tentando começar a trabalhar. Eu fiz com sucesso uma conexão com o objeto TcpClient para duas máquinas remotas separadas e dados transmitidos para eles. Essencialmente, I039m tentando me conectar à Máquina 1 na porta 80 e enviar uma solicitação GET. Uma vez que envie o pedido, quero manter a conexão viva para que o software do outro lado possa me enviar dados quando estiver pronto. Como faço para manter a conexão aberta e ler dados em cada vez que está disponível no fluxo, tentei e tentei usar o NetworkStream. Leia e BeginRead, sem sucesso. O mais próximo que eu vim estava dormindo meu fio a cada 30 segundos e depois fazendo outro pedido GET que não é necessário. Aqui está o código atual que tenho para ler do fluxo. Eu sei que preciso de um loop aqui em algum lugar: Nota: RemoteSocket é meu objeto TcpClient que está conectado por este ponto Dim serverStream As NetworkStream RemoteSocket. GetStream () rqst quotGet ControlClipForwardingStreamCameraNamequot amp URLEncode (Nome) amp quot HTTP1.0quot amp vbCrLf amp vbCrLf I Saiba como iniciar um arquivo ou executável no VB 2005. O arquivo será iniciado e a execução no código continuará imediatamente. Mas e se eu precisar iniciar o programa, aguarde até que ele termine de executar, leia o código de saída que ele envia de volta e leve alguma ação com base no código de ação. Como eu faço isso? Como eu faria um programa VB que pode ser requisitado para Um processo para iniciar e depois matá-lo. I039d gostaria de ter uma função no meu programa que espera que um processo seja iniciado e, uma vez que o faz, ele executa o código. Eu gosto de ter uma forma de mensagens 039buttonless box039 ou 039splash screen039 esperando dizendo quotwaiting para que o processo comece. Quot e uma vez que o processo começa, uma caixa de mensagem aparecerá dizendo que quotProcess iniciou-se. Eu estava pensando em ter um temporizador com um atraso baixo constantemente loop para ver se o processo existe, mas isso seria um pouco áspero no processador, não Além disso, como eu conseguiria o 03boxboxbox 0349 sem batente que fecha automaticamente quando o processo é encontrado I039m Tentando desenvolver um aplicativo do Windows onde eu possa me conectar ao servidor remoto e procurar o estado do processo no servidor remoto. Temos muitos servidores remotos onde a instalação automática do software está sendo iniciada. Nós temos um arquivo xml (installstatus. xml) onde nos informa em que etapa a instalação é (Exemplo. Inprogress. Concluído, Falha.) Portanto, nosso objetivo é desenvolver um aplicativo do Windows onde eu possa me conectar a esses servidores e procurar Seu status de instalação (pode ser que possamos usar o installstatus. xml para procurar o status da instalação). Toda vez que eu me conectar a um servidor, as informações do servidor devem ser armazenadas no arquivo XML (eu quero criar um arquivo xml onde toda a lista de servidores que eu conecto deve ser armazenada) A interface do usuário no lado esquerdo deve ter uma lista de servidores que eu posso conectar a. Quando eu me conecto ao servidor, no lado direito da interface do usuário, eu quero exibir o status da instalação (Em andamento, falha, concluída). O código a seguir abre um Word doc e preenche os dados conforme o projeto. Quando saio dele, o processo WINWORD. EXE mantém-se ativo. Se eu executar o código uma segunda vez e sair dele novamente, um segundo processo de WINWORD. EXE é adicionado e permanece ativo. O exemplo mostrado na url. Não produz o mesmo problema. Obviamente, eu não estou saindo do código como eu deveria, mas não consigo ver onde. Eu tentei fazer loop até que, e até mesmo aguarde, nada funciona, na medida em que não era realmente bom com loops. code Eu quero extorquir o comando de desinstalação Com VB, mas quer esperar até o processo de desinstalação terminar como Painel de controle, o comando Shell parece não perceber isso. Código. Basicamente, estou apenas tentando fechar o threadprocess após o fim dele. Private psi Como ProcessStartInfo Private cmd como Process Public Delegate Sub InvokeWithString (ByVal text As String) Private Sub Button1Click (ByVal sender As System. Object, ByVal e As System. EventArgs) Controla Button1.Click Dim psi como New ProcessStartInfo (quotm7.batquot) Código. Estou tentando fechar o fio, então, assim que isso acontecer, ele fechou para sempre e meu formulário também está fechado. Eu tentei Me. Close (), o que resulta em: quotCross-thread operação não válida: Controle 039Form1039 acessado de um segmento diferente do segmento que foi criado no. quot Erro. Me. Invoke (New InvokeWithString (AddressOf CloseME), e) - Resultados no erro de incompatibilidade de parâmetro. No entanto, coisas como a Msgbox (quotDonequot) funcionam perfeitamente. Temos um aplicativo que permite a interface do usuário e a interação via SDK. Uma DLL é desenvolvida para este propósito usando o VB e o SDK. Uma variável de objeto refere-se ao aplicativo e existem algumas outras variáveis ​​de objeto para componentes dentro do aplicativo. Eu publiquei o meu aplicativo, e o instalei no meu pc. Agora, eu funciono e funciona muito bem, no entanto, quando eu fechar o. exe doesn039t end. Estou executando macros de um clique no meu aplicativo. Quero que as macros sejam executadas com sucesso antes de iniciar outro processo. Quero que o StartMacrosI comece e complete primeiro antes de iniciar o DeleteFilesI. Eu preciso esperar para que ele complete antes de fazer o próximo functionsub. Abaixo está o meu código. Private Sub Button2Click (remetente como System. Object, e como System. EventArgs) lida com Button2.Click StartMacrosI () DeleteFilesI () End Sub Code. Estou trabalhando em um game launcher, e eu preciso exibir um quotSplash screenquot até o jogo principal ter começado. Para isso, eu preciso saber se o Processo tem ou não uma janela Principal totalmente carregada e exibida. Agora notei que o identificador da janela principal é 0 quando não existe, então tentei usar isso: codeBut o identificador nunca se torna diferente de zero . Eu tentei usar o título, mas sem sucesso. Eu não quero entrar no quotThread. wait () quot desde então o splash permaneceria mesmo se o jogo já foi lançado. I039m não pergunte como sair do programa (disponha ()), em vez disso, tenho um programa que verifica se um determinado processo está em execução e, se assim for, exibe uma caixa de mensagem, pára o processo e (deve) sair do programa. Se o processo não for detectado, o programa carrega normalmente e abre um programa externo. Meu problema é que ele pára o processo e ainda executa o programa. Como posso parar completamente o código e sair do meu programa, escrevi as seguintes linhas de código dentro do manipulador par para um evento ProcessExited. A coisa realmente estranha é que na quinta linha eu recebo o erro quotProcess deve sair antes que informações solicitadas possam ser determinadas. (Ao tentar acessar o código de saída do amplificador de tempo de saída) Private Sub AssociatedProcessExited (Remetente ByVal como objeto, ByVal e como System. EventArgs) lida com AssociatedProcess. Exited Do Until AssociatedProcess. HasExited True Eu quero verificar se um processo em execução no computador remoto ou Não e se ele está sendo executado, mate-o. Estou usando o código seguinte, mas dá erro quotCouldn039t conectar-se a machinequot remoto. Preciso fazer todas as configurações de segurança no pc remoto onde eu estou conectando Para cada myObj como processo no System. Diagnostics. Process. GetProcesses (quot192.168.0.138quot) Se myObj. ProcessName. Equals (quotHomeAlarm System. exequot) Então myObj. Kill () End If Next Estou escrevendo um programa que procura um exe particular executando nas estações no mesmo grupo de trabalho, se ele o encontrar, então o matará. Eu sei como procurar processos em execução no PC local, mas não consigo descobrir como fazê-lo em um PC remoto. Eu posso shell (quotTASKKILL S computername F IM exequot) que funciona, no entanto, não tenho registro de erros. Se houver um erro, o aplicativo simplesmente trava. O código abaixo inicia o processo correto, mas o formulário do Windows nunca aparece na máquina remota. Como faço para que o aplicativo seja realmente carregado. Private Sub RunRemoteProcess () Dim sCmd As String quotC: Program FilesInternet ExplorerIEXPLORE. EXE quot amp txtData. Text. Trim 039 adicione uma referência ao System. Management no Solution Explorer Criei uma aplicação que abre arquivos pdf para diferentes configurações GPRS de vários telefones . Esses arquivos pdf são armazenados em um computador remoto (máquina central). Estou tendo problemas para usar o process. start. Este é o código que estou usando para o meu botão de busca: processo Dim como novo processo process. start ((quot192.168.2.78C: Documents and SettingsphamandaMy DocumentsGprsBenqquot) amp ComboBox5.Text amp quot. pdfquot) process. start reconhece endereços IP Copie um arquivo para um alvo remoto onde as conexões UNC PARA o alvo podem não ser possíveis. No entanto, as conexões UNC do alvo e BACK para o servidor sempre serão possíveis. Então, o plano era usar o WMI para iniciar um shell de comando remoto (cmd) e usar o comando de cópia para pegar o arquivo. Mas isso não funciona. O seguinte comando funciona bem quando executado manualmente a partir da linha de comando do alvo: no VBScript, para criar um novo processo em uma máquina remota, você poderia usar isso, eu gostaria de fazer o mesmo no uso do WMI e eu tentei fazer Isso sozinho, mas meu código não está funcionando corretamente. Se eu especificar minhas credenciais de logon, o processo será executado na máquina remota e o código funcionará bem, mas eu quero que o programa envie a consulta WMI usando a representação. Eu acreditava que isso deveria enviar as credenciais do usuário do usuário usando o programa para o provedor WMI remoto na máquina remota. Aqui está o código que estou usando: preciso verificar se o processo explorer. exe está sendo executado em um computador remoto para verificar se há um usuário logado no computador. Também quero obter o Provedor de Processo do processo explorer. exe para verificar qual usuário iniciou sessão. Eu encontrei alguns exemplos de VBscript on-line, mas eu não posso parecer que eles funcionem. Se alguém conhece uma maneira melhor de verificar se e o usuário iniciou sessão em um computador, me dê uma resposta também. Eu tentei o System. Diagnostics. Process. GetProcesses, mas eu não consigo achar o proprietário do processo, talvez a WMI faça o truque. Estou tentando obter uma lista de processos em execução na máquina remota e o nome de usuário que os executa. Até agora eu tenho: Dim ps como System. Diagnostics. Process para cada ps em System. Diagnostics. Process. GetProcesses (quotmyserverquot) ListBox1.Items. Add (ps. ProcessName) NextIm usando o WMI para iniciar um processo em uma máquina remota. A chamada para criar o processo retorna imediatamente e também obtive o ID do processo na máquina remota. Gostaria de aguardar a conclusão do processo remoto. Uma opção seria verificar se um processo na máquina remota com a identificação dada ainda existe. No entanto, eu queria saber se há uma maneira melhor de conseguir isso, talvez usando funções nativas do WinAPI. Apenas para obter informações adicionais, este é o código que estou atualmente usando para iniciar o processo remoto: solicitado 14 de abril de 09 às 15:54 O nativo O modo Win32 de conseguir isso seria executar um WaitForSingleObject () no process handle retornado pelo CreateProcess (). No entanto, eu não acho que esse identificador esteja disponível para você da WMI. Este artigo oferece outra opção que você poderia considerar - em vez de pesquisar a lista de processos e aguardando a desaprovação do processo, consulta repetidamente os eventos de exclusão de processo que correspondem ao ID do processo: você também pode melhorar isso usando um objeto ManagementEventWatcher e seu método WaitForNextEvent Para evitar ter que pesquisar os eventos de exclusão.

No comments:

Post a Comment