Я использую CreateProcess()
для запуска cmd.exe
(без физического отображения окна для пользователя) и мне нужно обработать вывод.Я решил использовать CreatePipe()
для этой цели.
В настоящее время у меня возникла проблема, из-за которой весь мой вывод читается и обрабатывается, но последний вызов ReadFile()
зависает.Поиск вокруг сказал мне, что мне нужно закрыть сторону записи канала перед чтением, и что это решение этой проблемы, но я уже сделал это и все еще имею проблему.
Вот мойкод:
// sw -> path to cmd.exe, ptr is the command
ok = CreateProcess(sw, ptr, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &StartupInfo, &ProcessInfo);
CloseHandle(hStdInPipeRead);
char buf[1024 + 1] = {};
DWORD dwRead = 0;
DWORD dwAvailable = 0;
DWORD testRes;
CloseHandle(hStdOutPipeWrite);
ok = ReadFile(hStdOutPipeRead, buf, 1024, &dwRead, NULL);
// String handling for initial read omitted for clarity
string temp = buf;
bool holdOff = false;
while (ok == TRUE)
{
buf[dwRead] = '\0';
OutputDebugStringA(buf);
puts(buf);
// ReadFile gets all the correct output from cmd here but it also hangs on the very last call. How to fix?
ok = ReadFile(hStdOutPipeRead, buf, 1024, &dwRead, NULL);
temp = buf;
// handle and store output
break;
}
CloseHandle(hStdOutPipeRead);
CloseHandle(hStdInPipeWrite);