[Editar final]
un SO pregunta similar se funde todo lo dicho anteriormente y que lleva su salida C++ popen command without console
[Editado de nuevo]
erk. lo siento, me entusiasmé con los procesos de desove. Releí tu q. y aparte de la ventana adicional, en realidad está tratando de obtener el stdout/stderr del proceso. Solo me gustaría agregar que para ese propósito, todas mis sugerencias son tristemente irrelevantes. pero los dejaré aquí para referencia.
[Editado]
sin motivo específico (excepto que "abra" funciona para equipos Windows y Mac), utilizo ShellExecute para los procesos de desove en lugar de CreateProcess. Lo investigaré más tarde ... pero aquí está mi función StartProcess.
Ocultos o minimizados parecen producir el mismo resultado. la ventana de cmd aparece, pero se minimiza y nunca aparece en el escritorio, que podría ser su objetivo principal.
#if defined(PLATFORM_WIN32)
#include <Windows.h>
#include <shellapi.h>
#elif defined(PLATFORM_OSX)
#include <sys/param.h>
#endif
namespace LGSysUtils
{
// -----------------------------------------------------------------------
// pWindow : {Optional} - can be NULL
// pOperation : "edit", "explore", "find", "open", "print"
// pFile : url, local file to execute
// pParameters : {Optional} - can be NULL otherwise a string of args to pass to pFile
// pDirectory : {Optional} - set cwd for process
// type : kProcessWinNormal, kProcessWinMinimized, kProcessWinMaximized, kProcessHidden
//
bool StartProcess(void* pWindow, const char* pOperation, const char* pFile, const char* pParameters, const char* pDirectory, LGSysUtils::eProcessWin type)
{
bool rc = false;
#if defined(PLATFORM_WIN32)
int showCmd;
switch(type)
{
case kProcessWinMaximized:
showCmd = SW_SHOWMAXIMIZED;
break;
case kProcessWinMinimized:
showCmd = SW_SHOWMINIMIZED;
break;
case kProcessHidden:
showCmd = SW_HIDE;
break;
case kProcessWinNormal:
default:
showCmd = SW_NORMAL;
}
int shellRC = (int)ShellExecute(reinterpret_cast<HWND>(pWindow), pOperation,pFile,pParameters,pDirectory,showCmd);
//Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise.
if(shellRC > 32)
{
rc = true;
}
#elif defined(PLATFORM_OSX)
char cmd[1024];
sprintf(cmd, "%s %s", pOperation, pFile);
int sysrc = system(cmd);
dbPrintf("sysrc = %d", sysrc);
rc = true;
#endif
return rc;
}
}
[y anteriormente mencionado]
Si usted está en control del código fuente de la aplicación que se puso en marcha, podría intentar añadir esto a la parte superior de su main.cpp (o lo que usted tiene lo llamó)
// make this process windowless/aka no console window
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
También podría alimentar esas opciones al vinculador directamente. Lo anterior es más fácil de jugar con diferentes configuraciones de construcción.
¿Sigue apareciendo si redirige su salida a alguna parte?A otra tubería o un archivo? http://msdn.microsoft.com/en-us/library/ms682499.aspx (No sé, estoy simplemente especulando) –