я думаю soft.exe > your_soft.exe не софсем то что надо, т.е. не софсем будет работать. замарчивался с этой проблемой я уже

PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;
ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );
HANDLE ChildStdOutRead, ChildStdOutWrtite, ChildStdInRead, ChildStdInWrite;
HANDLE ParentStdOutRead, ParentStdInWrite;
ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
siStartInfo.cb = sizeof(STARTUPINFO);
SECURITY_ATTRIBUTES saAttr;
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
//pipe for child's out
CreatePipe(&ChildStdOutRead, &ChildStdOutWrtite, &saAttr, 0);
DuplicateHandle(GetCurrentProcess(), ChildStdOutRead, GetCurrentProcess(), &ParentStdOutRead, 0, FALSE, DUPLICATE_SAME_ACCESS);
CloseHandle(ChildStdOutRead);
//pipe for child's in
CreatePipe(&ChildStdInRead, &ChildStdInWrite, &saAttr, 0);
DuplicateHandle(GetCurrentProcess(), ChildStdInWrite, GetCurrentProcess(), &ParentStdInWrite, 0, FALSE, DUPLICATE_SAME_ACCESS);
CloseHandle(ChildStdInWrite);
siStartInfo.hStdError = ChildStdOutWrtite;
siStartInfo.hStdOutput = ChildStdOutWrtite;
siStartInfo.hStdInput = ChildStdInRead;
siStartInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
siStartInfo.wShowWindow = SW_HIDE;
CreateProcess(Command, Arg, NULL, NULL, true, 0, NULL, data.TempDir, &siStartInfo, &piProcInfo);
while (1)
{
WaitForSingleObject(piProcInfo.hProcess, CONSOLE_WAITING_INTERVAL);
CHAR Buffer[MAX_STR_LENGTH*10] = {0};
DWORD dwRead = 0;
BOOL ReadResult = ReadFile(ParentStdOutRead, Buffer, MAX_STR_LENGTH*10, &dwRead, NULL);
while (ReadResult && dwRead==0)
{
ReadResult = ReadFile(ParentStdOutRead, Buffer, MAX_STR_LENGTH*10, &dwRead, NULL);
}
//parsing output
//........................
//.......................
//а так мона писать иму на фход
WriteFile(ParentStdInWrite, "yes\r\n", 5, &dwWrite, NULL);
}
вопщем идея должна быть понятна. на мсдне фсе это далжно быть