Sunday, 10 December 2017

Waitforexit example c ++ programas


Estou tendo o PsExec pendurado durante a execução de um programa c or c gui muito simples compilado como aplicativo do Windows (não como aplicativo de console). Na seção C) abaixo coloquei o código para reproduzir o problema e na seção D) coloquei o código c para reproduzir o mesmo problema. Quando o psexec trava, a saída do vento depois de ser anexada ao psexec localmente é colada na seção B). Meu programa trava depois de despejar a saída colada na seção A). O programa funciona bem se você substituir o comando psexec por qualquer local, por ex. ProcessStartInfo (cmd. exe, c dir c: windows.) Eu queria saber se alguém experimentou e encontrou a solução para isso. A ajuda será muito apreciada. A) A saída do programa do meu c quando o psexec armazena o PsExec v1.98 - Execute os processos de forma remota Copyright (C) 2001-2018 Mark Russinovich Sysinternals - sysinternals O volume na unidade C não possui rótulo. B) Saída Windbg para psexec enquanto pendura 3 Id: 1614.15e4 Suspender: 1 Teb: 7efac000 Não congelado ChildEBP RetAddr Args to Child 02a3fe68 75a6d0c5 00000180 00000000 00000000 ntdllNtReadFile0x15 (FPO: 9,0,0) 02a3fecc 75cb18aa 00000180 02a3ff44 00010000 KERNELBASEReadFile0x118 (FPO: SEH ) 02a3ff14 00403bde 00000180 02a3ff44 00010000 kernel32ReadFileImplementation0xf0 (FPO: SEH) AVISO: informações de desenrolar de pilha não disponíveis. Os quadros seguintes podem estar errados. 02a3ff2c 00000000 00291e48 00000000 02a5ff80 psexec0x3bde C) O código c para reproduzir o problema D) O código c para reproduzir o problema - i corrigi meus problemas suspensos no entanto, ao fazê-lo dessa forma, não recebo o resultado do programa. O que não entendo é que estava funcionando bem, aparentemente parou. Vejo que o processo chamado pelo PSEXESVC termina normalmente, mas o PSEXESVC nunca termina e notifica o PSEXEC. Tão irritante. Ndash Brad 20 jun 13 às 20:41 Nenhum problema Vlad. Ligar NotWorkingPsExec novamente e novamente, NÃO ajuda. (Desculpe pelo meu erro de digitação na amostra fornecida.) No entanto, chamar WorkingPsExec, em vez disso, funciona bem. A única diferença entre os dois é que não estou ativando o redirecionamento SD no segundo caso. No caso anterior em que o PsExec trava, o rastreamento da pilha de pórticos suspensos do lado do cliente indica que está aguardando o ReadFile. Minha suspeita é que atingiu algum impasse com o PSEXESVC em execução na máquina remota. Ndash sharrajesh 13 de abril 11 às 21:52 Oi, Manojids, Obrigado pela resposta. Mesmo que eu tentei mencionar isso no meu título de assunto, mas eu deveria ter enfatizado mais que o problema acontece quando meu programa é compilado como quotWindows Applicationquot em vez de quotConsole Applicationquot. Meu programa funcionou bem se eu compilá-lo como um quotConsole Applicationquot. Se eu compilar seu esforço como um aplicativo quotwindows, ele está pendurado no mesmo lugar. Vou tentar algumas de suas outras sugestões. Obrigado grupo. Ndash sharrajesh 13 de abril 11 às 23:04 gtgtNota na limpeza do PSEXESVC: exclua o arquivo PSEXESVC. EXE Estou ciente desta etapa. Apenas para ter certeza na máquina remota eu estava chamando quotnet stop psexesvcquot ou reiniciando minha máquina se psexesvc não conseguir parar. ) Ndash sharrajesh 13 de abril 11 às 23: 08Para algumas razões técnicas, eu tive que desenvolver 2 projetos separados no VS2018: o principal no c4343cli. E o segundo em c4343 nativo. Ps: ambos os projetos estão sendo salvos em caminhos diferentes no meu C: Objetivo: eu gosto de saber como posso chamar e executar o projeto c4343 nativo dentro de um manipulador de botão do meu projeto principal c4343cli. Em primeiro lugar, é possível Em segundo lugar, alguém pode descrever brevemente como posso prosseguir sexta-feira, 19 de dezembro de 2017 5:10 PM Na verdade, jiteepee - o diretório atual é uma escolha muito fraca ao tentar encontrar um arquivo no mesmo diretório que o executável atual . Certamente, não há garantia de que o diretório atual seja o executável atualmente em execução. Para o C4343, eu usaria GetModuleHandle (nulo) juntamente com as APIs Path para obter esse caminho. Para C4343CLI, há uma variedade de opções. Se usar o WinForms é provavelmente o mais fácil Marcado como resposta por Shu Hu segunda-feira, 29 de dezembro de 2017 10:53 feira sexta-feira, 19 de dezembro de 2017 9:57 PM Seu projeto nativo é uma DLL ou um EXE Se é exe, basta chamá-lo Com Process :: Start (ou CreateProcess ou ShellExecute). Se for uma DLL, esteja ciente de que geralmente não deve tentar compartilhar classes C4343 em todos os limites da DLL. Embora possa funcionar quando todos os projetos são compilados com a mesma versão do compilador e as mesmas configurações do compilador, ele tende a ser muito frágil. Aqui está um exemplo no MSDN. O exemplo mostra a mecânica bem. (Nota: não gosto particularmente desse exemplo porque ele usa uma classe C4343. Nesse caso particular, é seguro porque somente as funções de membros estáticas são exportadas e essas funções usam apenas tipos de dados que podem ser expressos em C). Eu não acredito que seu exemplo de jogar um std :: invalidargument em todo o limite da DLL é seguro e pode falhar horrivelmente se o código for compilado com uma versão diferente do compilador. Editado por SimonRev sexta-feira, 19 de dezembro de 2017 5:20 PM sexta-feira, 19 de dezembro de 2017 5:17 PM SimonRev: Obrigado pelo seu rápido feedback. Na verdade, o projeto nativo é um. exe. Sobre Process :: start você usaria algo como: stringpathC: UsersDocumentsVisual Studio 2018ProjectsTestDebugTest. exe sexta-feira, 19 de dezembro de 2017 5:58 PM Além de eu preferiria evitar a codificação rígida de um caminho para minha máquina de desenvolvimento, sim, essa é a idéia geral . Se o seu programa tiver parâmetros de linha de comando, você pode usar a versão de dois argumentos do Process :: Start (capital S). Se você quiser esperar até o programa terminar, use o Processo :: Iniciar (caminho) - gtWaitForExit () Marcado como resposta por Shu Hu Segunda-feira, 29 de dezembro de 2017 10:53 Sexta-feira, 19 de dezembro de 2017 6:42 PM Se A localização do test. exe é igual ao programa de chamada, então provavelmente você pode usar o getcwd () para obter o diretório atual. Algo como isto (este é um exemplo de código gerenciado, (nota: funções CRT não suportadas com ZW): Marcado como resposta por Shu Hu segunda-feira, 29 de dezembro de 2017 10:54 sexta-feira, 19 de dezembro de 2017 9:47 PM Na verdade jiteepee - - o diretório atual é uma escolha muito fraca ao tentar encontrar um arquivo no mesmo diretório que o executável atual. Certamente, não há garantia de que o diretório atual seja o executável atualmente em execução. Para o C4343 eu usaria GetModuleHandle (nulo) ao longo Com as APIs Path para obter esse caminho. Para C4343CLI, há uma variedade de escolhas. Se usar o WinForms é provavelmente o mais fácil Marcado como resposta por Shu Hu segunda-feira, 29 de dezembro de 2017 10:53 am sexta-feira, 19 de dezembro de 2017 9: 57 PM SimonRev: Obrigado pelo conselho. Tudo está funcionando. Uma última pergunta rápida apenas por curiosidade, pois eu poderia precisar disso no futuro. Existe um método equivalente Process :: Start () no nativo c4343, digamos id como meu projeto principal Em c4343 para ligar e executar um projeto separado em c4343cli (reverse tas K) Sábado, 20 de dezembro de 2017 4:18 jiiteepee: Obrigado por fornecer uma idéia alternativa, SimonRev-gt Obrigado por seus comentários sobre a solução proposta. Isso ajuda a conhecer qualquer avantagem. Chees sábado, 20 de dezembro de 2017 4:24 AM Em 12192017 11:18 PM, itneophyte85 escreveu: Existe um método equivalenteProcess :: Start () no nativo c4343 Marcado como resposta por Shu Hu segunda-feira, 29 de dezembro de 2017 às 10:54 Sábado, 20 de dezembro de 2017 4:24 AM ps: Feliz Natal para desenvolvedores úteis no fórum MSDN Terça, 23 de dezembro de 2017 22:45 A Microsoft está conduzindo 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? Ajude-nos a melhorar o MSDN. Visite a nossa página UserVoice para enviar e votar ideias Centros Dev Recursos de aprendizagem

No comments:

Post a Comment