Я хочу создать дочерний процесс с наложением дескриптора на false и с перенаправлением консоли. для этого я создаю дескриптор дескриптора stdinput и задаю наследование true для этого дескриптора и добавим его в структуру StartupinfoEX, которую я отправляю после создания процессаStartupinfoEX и перенаправление консоли
проблема заключается в том, что дочерний процесс правильно получает дескриптор (i проверьте его в проводнике процессов), но перенаправление консоли не назначено (похоже, что предыдущий дескриптор не назначен для stdinput)!
, когда, конечно, я использую стандартную STARTUPINFO с наследованием истина в 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
));
любая идея, что может быть неправильным?
Это лишь малая часть подмножества вашего кода, которая может считаться уместной для вашего вопроса. Например, где код, который устанавливает член lpAttributeList из STARTUPINFOEX? –
Наследование на рукоятке: http://blogs.msdn.com/b/oldnewthing/archive/2011/12/16/10248328.aspx – avakar