FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Por suerte, son casos muy rebuscados, pero algunos hay.
Por ejemplo, un caso absurdo, pero que como ejemplo puede valer. Si queremos ejecutar "notepad.exe", todo funciona OK. Se abre un NotePad con un documento en blanco sin problemas. Pero el programa se queda atrapado en el bucle infinito hasta que cerremos el NotePad. Como digo, es un caso absurdo, porque el NotePad no da salida a MS-DOS. Pero como ejemplo, puede valer. Sin embargo hay otros casos nada absurdos y que sí tienen salidas a MS-DOS que, ejecutados desde una ventana de comandos, quedan igualmente atrapados en ese bucle infinito. Como ejemplo, puedo comentar lo que más me afecta a mí, particularmente. En otro hilo ( http://www.clubdelphi.com/foros/showthread.php?p=387845 ) explico mi necesidad de "reinventar la rueda" para hacer ejecuciones en remoto. Logré localizar por internet un programa (PSExec.exe) capaz de ejecutar cosas en remoto (no me soluciona el problema, pero es lo que tengo). Por ejemplo..., con ésto se ejecutaría DIR en una máquina remota: psexec.exe \\DirecciónIP -u usuario -p password cmd /c dir Esa línea de comando funciona perfectamente desde una ventana de comandos MS-DOS. Pero si la lanzas desde Delphi, e intentas capturar su salida MS-DOS, entra en bucle infinito. No obstante, otras ejecuciones en remoto con PSExec.exe sí que son capturables sus salidas MS-DOS. Así que el problema no es 100% de PSExec.exe. Es un caso rebuscado, sí. Pero es el que me afecta. Muchas gracias. Un saludo. |
#2
|
||||
|
||||
¿Un bucle infinito haciendo qué?
|
#3
|
|||
|
|||
Lo explico más arriba.
Es referente a la solución aportada por kurono, y la presente en TrucoManía. En ambos casos hay un REPEAT UNTIL, dentro del cual se recoge la salida MS-DOS. Se sale del bucle cuando el proceso lanzado deja de estar activo. Pero en algunos casos, esa señal nunca llega, o no llega cuando se espera que llegue. |
#4
|
||||
|
||||
Inténtalo de esta forma:
Saludos. |
#5
|
|||
|
|||
Muchas gracias..., pero no funciona.
Da igual lo que intente ejecutar. CreateProcess() siempre devuelve FALSE, así que nunca llega a ejecutar el comando. |
#6
|
||||
|
||||
Cita:
Ademas, ejecuta y captura comandos difíciles de capturar como el "xcopy". Cambia la línea:
por
Saludos. Última edición por escafandra fecha: 27-01-2011 a las 16:21:38. |
#7
|
|||
|
|||
A mí me tiene manía. Se niega a funcionar. ¿Podrá ser por la versión del Delphi? Yo trabajo con Delphi 6 (arcaico, sí, pero es lo que hay) |
#8
|
||||
|
||||
Free Pascal incluye la clase TProcess, que estrictamente hablando crea procesos nuevos y permite la comunicación con estos. Dado que trabaja a nivel de proceso y no de programa, permite ejecutar comandos de consola que no son programas sino funciones dentro de dicha consola (haberlos haylos, como "dir" o "cd"). Además permite capturar mensajes no sólo de la salida "normal" (stdout en POSIX) sino también por otras fuentes (como stderr, variables del sistema, etc.) que no pueden capturarse por ">" ni ">>", además de permitir la redirección de archivos y otras cosas interesantes.
Lo que no sé es si existe esta clase en Delphi, pero por lo que he leído por ahí no hay un equivalente claro. |
#9
|
||||
|
||||
Cita:
Pues mira http://www.elmalabarista.com/es/blog...ti-plataforma/ Asi es como la porte a Delphi Y asi se usa:
Desafortunadamente tiene un bug: Si el proceso DOS genera un output muy grande muy rapido se queda "colgado". No he podido ver todavia como arreglarlo...
__________________
El malabarista. |
#10
|
||||
|
||||
Cita:
Ya digo que no lo he estudiado, pero se ve bien. |
|
|
|