Ejecutar con ShellExecute, redirigiendo la salida estandard

21/05/2004 - 14:38 por jose | Informe spam
Hola grupo,

Tengo un problema. Deseo ejecutar una aplicación ms-dos y grabar en un
fichero la salida que se genera en pantalla. Por ejemplo:
ping.exe "www.google.com" > salida.txt
He probado con ShellExecute y con _spwanl sin conseguirlo:
HINSTANCE hIns = ShellExecute( GetSafeHwnd(), "open", "C:\\WINNT
\\system32\\ping.exe", " www.google.com > c:\\salida.txt", "C:\\WINNT
\\system32", SW_SHOW );
_spawnl( _P_WAIT, "C:\\WINNT\\system32\\ping.exe", "C:\\WINNT
\\system32\\ping.exe", " www.google.com > c:\\salida.txt", NULL );

¿Se os ocurre qué hago mal?
¿De qué otra forma se puede hacer?

Muchas gracias,

Jose
 

Leer las respuestas

#1 Hernán
21/05/2004 - 18:52 | Informe spam
jose escribía:

Hola grupo,

Tengo un problema. Deseo ejecutar una aplicación ms-dos y grabar en un
fichero la salida que se genera en pantalla. Por ejemplo:
ping.exe "www.google.com" > salida.txt
He probado con ShellExecute y con _spwanl sin conseguirlo:
HINSTANCE hIns = ShellExecute( GetSafeHwnd(), "open", "C:\\WINNT
\\system32\\ping.exe", " www.google.com > c:\\salida.txt", "C:\\WINNT
\\system32", SW_SHOW );
_spawnl( _P_WAIT, "C:\\WINNT\\system32\\ping.exe", "C:\\WINNT
\\system32\\ping.exe", " www.google.com > c:\\salida.txt", NULL );

¿Se os ocurre qué hago mal?
¿De qué otra forma se puede hacer?

Muchas gracias,

Jose



Algo así

STARTUPINFO si = {0};

/* ocultas la consola creada por ping */
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;

HANDLE EscribeOutput = CreateFile("c:\\salida.txt", GENERIC_WRITE, \
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

if (NULL == EscribeOutput)
{
/* fallo CreateFile() */
}
else
{
PROCESS_INFORMATION pi;

si.hStdOutput = EscribeOutput;

if (CreateProcess("C:\\WINNT\\system32\\ping.exe", \
" www.google.com", NULL, NULL, TRUE, \
CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
{
CloseHandle(pi.hThread);

if (WAIT_FAILED == WaitForSingleObject(pi.hProcess, INFINITE))
{
/* fallo WaitForSingleObject() */
}
CloseHandle(pi.hProcess);
}
CloseHandle(EscribeOutput);
}

Hernán (28)
Quilmes (ar)

Preguntas similares