Я хочу создать дочерний процесс с дескриптором наследования в ложь И с перенаправлением консоли.для этого я создаю дескриптор stdinput namepipe и устанавливаю для наследника значение true для этого дескриптора и добавляю его в структуру StartupinfoEX, которую я отправляю после createprocess
, проблема в том, что дочерний процесс правильно получает дескрипторя проверяю это в проводнике процессов), но перенаправление консоли не назначено (похоже, предыдущий дескриптор не назначен для stdinput)!
когда, конечно, я использую стандартный STARTUPINFO с наследованием на true в createprocessвсе отлично работает ...
мой код
FServerPipe: = CreateNamedPipe (....);
.........
si.StartupInfo.hStdInput := FServerPipe;
si.StartupInfo.hStdOutput := INVALID_HANDLE_VALUE;
si.StartupInfo.hStdError := INVALID_HANDLE_VALUE;
.........
UpdateProcThreadAttribute (...)
.........
CheckError(Not CreateProcess(
PChar(aPhpInterpreterFilename), // pointer to name of executable module
nil, // pointer to command line string
nil, // pointer to process security attributes
NiL, // pointer to thread security attributes
TrUE, // handle inheritance flag
CREATE_NO_WINDOW
or
EXTENDED_STARTUPINFO_PRESENT, // creation flags
Pchar(aEnvironment), // pointer to new environment block
nil, // pointer to current directory name
TStartupInfo(PStartupInfo(@si)^), // pointer to STARTUPINFO
fServerProcessInformation // pointer to PROCESS_INFORMATION
));
есть идеи, что может быть не так?