Я хочу разработать приложение в MFC, которое могло бы запустить длительный процесс консоли и выдать его вывод одновременно в текстовой области приложения 32-битного окна.
Я использовал каналы, но он отображал вывод только послеПроцесс завершен.Я попытался _popen, он работает для консольного приложения, но не совместим с приложением win32.
при поиске в Интернете я нашел множество кода с использованием CLR, но мне нужно как-то в MFC, без использования .Net ..Пожалуйста, помогите.
Заранее СПАСИБО: -)
Вот мой код, который запускает приложение:
void CAppMgr_BackupsDlg::ExecuteExternalFile(CString csExeName, CString csArguments)
{
CString csExecute;
csExecute=csExeName + " " + csArguments;
SECURITY_ATTRIBUTES secattr;
ZeroMemory(&secattr,sizeof(secattr));
secattr.nLength = sizeof(secattr);
secattr.bInheritHandle = TRUE;
HANDLE rPipe, wPipe;
//Create pipes to write and read data
CreatePipe(&rPipe,&wPipe,&secattr,0);
STARTUPINFO sInfo;
ZeroMemory(&sInfo,sizeof(sInfo));
PROCESS_INFORMATION pInfo;
ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb=sizeof(sInfo);
sInfo.dwFlags=STARTF_USESTDHANDLES;
sInfo.hStdInput=NULL;
sInfo.hStdOutput=wPipe;
sInfo.hStdError=wPipe;
char command[1024];
strcpy(command, csExecute.GetBuffer(csExecute.GetLength()));
//Create the process here.
CreateProcess(0, command,0,0,TRUE,
NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);
CloseHandle(wPipe);
//now read the output pipe here.
char buf[100];
DWORD reDword;
CString m_csOutput,csTemp;
BOOL res;
do
{
res=::ReadFile(rPipe,buf,100,&reDword,0);
csTemp=buf;
m_csOutput=csTemp.Left(reDword);
DisplayToTextArea(m_csOutput);
}
while(res);
}
PS: я использую Visual Studio 2010 на x86 Windows 7Я делаю этот код для интеграции с WinPE, поэтому настоятельно необходимо MFC.