ハンドルの継承をfalseに設定して子プロセスを作成し、コンソールリダイレクトを作成したいと考えています。 これは私がstdinputの名前パイプハンドルを作成し、このハンドルのためにtrueに継承を設定し、それを構造体に追加するStartupinfoEX(後でcreateprocessに送信)StartupinfoEXとコンソールのリダイレクト
問題は、子プロセスが正しくハンドルプロセスエクスプローラで確認してください)、コンソールリダイレクトは割り当てられていません(前のハンドルがstdinputに割り当てられていないようです)!もちろん、私は素晴らしい仕事のCreateProcessのすべてでtrueに継承してスタンダールSTARTUPINFOを使用
...
私のコード
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
));
何が間違っている可能性がありますか?
これは、あなたの質問に関連すると思われるコードのサブセットのごく一部です。たとえば、STARTUPINFOEXのlpAttributeListメンバを設定するコードはどこですか? –
ハンドルの継承について:http://blogs.msdn.com/b/oldnewthing/archive/2011/12/16/10248328.aspx – avakar