Запускаю я cmd.exe с перенаправленным вводом\выводом. Потом запускаю через него какое-нибудь оконное приложение,а оно появляется на десктопе не сразу,а после того как запущу еще другое приложение (которое аналогично не появляется).В чем причина и что делать?
Нет,не в буферизации.Когда я запускаю приложение,оно появляется в списке процессов,но на десктопе только после запуска следующего
вот код запуска cmd.exe Код (Text): sa.nLength=sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor=NULL; sa.bInheritHandle=TRUE; CreatePipe(&clients[index].s_read,&clients[index].cli_out,&sa,NULL); CreatePipe(&clients[index].cli_in,&clients[index].s_write,&sa,NULL); DuplicateHandle(GetCurrentProcess(),clients[index].s_read,GetCurrentPr ocess(),&temp_handle,0,FALSE, DUPLICATE_SAME_ACCESS); CloseHandle(clients[index].s_read); clients[index].s_read=temp_handle; DuplicateHandle(GetCurrentProcess(),clients[index].s_write,GetCurrentP rocess(),&temp_handle,0,FALSE, DUPLICATE_SAME_ACCESS); CloseHandle(clients[index].s_write); clients[index].s_write=temp_handle; temp_handle=0; si.cb = sizeof( STARTUPINFO ); si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; si.wShowWindow = SW_HIDE; si.lpTitle=NULL; si.hStdInput=clients[index].cli_in; si.hStdOutput=clients[index].cli_out; si.hStdError=clients[index].cli_out; if (!CreateProcess( NULL,"cmd", NULL,NULL, TRUE, 0, NULL, NULL, &si, &pi )) { sp_data_cliout(index,"Error starting cmd.exe\n",24); } else { clients[index].cmd_ph=pi.hProcess; clients[index].cli=true; clients[index].thread=CreateThread(NULL,512,PipeReadThreadProc,(LPVOID)(DWORD)index,0,NULL); }
Да, поведение действительно загадочное. Могу предложить workaround - запускать так: Код (Text): start regedit.exe