Ejecutar .exe desde C++

Iniciado por XafiloX, 7 Noviembre 2010, 20:13 PM

0 Miembros y 1 Visitante están viendo este tema.

XafiloX

Hola a todos. Me gustaría saber cómo puedo hacer para ejecutar un exe desde C++ y obtener su salida para luego poderla tratar con mi programa.

¡Muchas gracias y un saludo!

madpitbull_99

Si mal no me acuerdo se puede hacer con system() o con CreateProcess, con system seria algo como :

Código (c++) [Seleccionar]
system("C:\capeta\mi_programa.exe")

Corregidme si me equivoco.



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

Shell Root

Pero si mal no recuerdo debería ser así,
system("C:\\PoC\\capeta\\NOTAS.exe");

Pero no sé si se puede obtener el resultado, -como lo hace php-
Cita de: XafiloX en  7 Noviembre 2010, 20:13 PMobtener su salida para luego poderla tratar con mi programa.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

XafiloX

Hola, gracias por responder.

He buscado ambas funciones y ninguna de las dos devuelve el resultado...system solamente devuelve 0, que significa que lo ha ejecutado con exito...

A ver si alguien conoce alguna función más...

BlackZeroX

.
Interceptando las salidas del debug...

Dulces Lunas!¡.
The Dark Shadow is my passion.

XafiloX

Como que el debug? Te refieres al debug que sirve para depurar los programas? Pero yo lo que quiero es un programa que llame a otro y realice ciertas operaciones sobre la salida del otro, cómo haría para llamar al debug y que me devuelva los resultados?

piou

Yo eso lo hacía redireccionando la salida a un archivo y leyendolo desde el programa, por ejemplo, este programa que ejecuta en linux el gcc y compila un archivo, y luego saca los errores, este justo es bastante inutil pero sirve como ejemplo:

Este es el programa:
#include <stdio.h>

int main(int argc, char *argv[])
{

system("gcc acompilar.c -o Main > archivo.txt 2>&1");
FILE *fichero;
    char letra;

    fichero = fopen("archivo.txt","r");
    if (fichero==NULL)
       {
       printf( "No se puede abrir el fichero.\n" );
       exit( 1 );
       }
    printf( "Contenido del fichero:\n" );
    letra=getc(fichero);
    while (feof(fichero)==0)
          {
          printf( "%c",letra );
          letra=getc(fichero);
          }
    if (fclose(fichero)!=0)
{
       printf( "Problemas al cerrar el fichero\n" );
    }

return 0;
}


Este es el archivo en C que le paso al gcc, con un fallo para que haya salida por stderr
#include <stdio.h>

int main(int argc, char *argv[])
{

printf(FALLOGARRAFAL);
return 0;
}


Si ejecutamos el programa se obtiene:
laptop:~$ ./a.out
Contenido del fichero:
acompilar.c: In function 'main':
acompilar.c:6: error: 'FALLOGARRAFAL' undeclared (first use in this function)
acompilar.c:6: error: (Each undeclared identifier is reported only once
acompilar.c:6: error: for each function it appears in.)


Y efectivamente en el archivo archivo.txt tenemos los fallos que nos ha mostrado antes.
acompilar.c: In function 'main':
acompilar.c:6: error: 'FALLOGARRAFAL' undeclared (first use in this function)
acompilar.c:6: error: (Each undeclared identifier is reported only once
acompilar.c:6: error: for each function it appears in.)

MazarD


-CreatePipe
-CreateProcess
-En el startupinfo de createprocess asignas tu pipe a la salida estandar (hStdOutput)
-ReadFile sobre la pipe

Investiga sobre pipes, en google o la msdn seguro que hay mucha información al respecto

Saludos!
-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net

XafiloX

Ummm...he empezado a buscar sobre pipes y me estoy dando cuenta de que es un auténtico mundo por descubrir...Cuando consiga hacer el programilla os lo digo por aquí.

Un saludo y ¡¡muchísimas gracias por la ayuda!!