2011-12-23 3 views
0

Я хочу создать дочерний процесс с наложением дескриптора на 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 
          )); 

любая идея, что может быть неправильным?

+0

Это лишь малая часть подмножества вашего кода, которая может считаться уместной для вашего вопроса. Например, где код, который устанавливает член lpAttributeList из STARTUPINFOEX? –

+0

Наследование на рукоятке: http://blogs.msdn.com/b/oldnewthing/archive/2011/12/16/10248328.aspx – avakar

ответ

0

Попробуйте опубликовать минимальный компилируемый пример & runnable - большая часть кода установки отсутствует в вашем фрагменте, а настройка перенаправления вручную с помощью труб немного затруднительна для работы ... вам нужно установить атрибуты безопасности, обработать дублирование, закрытие конечной точки и т. д.

Если вы еще не видели этого, this Статья MSDN показывает перенаправление с кодом C.