StartupinfoEX и перенаправление консоли - PullRequest
0 голосов
/ 24 декабря 2011

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

есть идеи, что может быть не так?

1 Ответ

0 голосов
/ 24 декабря 2011

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

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

...