2011-12-23 2 views
0

ハンドルの継承を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 
          )); 

何が間違っている可能性がありますか?

+0

これは、あなたの質問に関連すると思われるコードのサブセットのごく一部です。たとえば、STARTUPINFOEXのlpAttributeListメンバを設定するコードはどこですか? –

+0

ハンドルの継承について:http://blogs.msdn.com/b/oldnewthing/archive/2011/12/16/10248328.aspx – avakar

答えて

0

最小限のコンパイル可能な投稿を投稿してみてください&実行可能な例 - ほとんどの設定コードがスニペットにありません。パイプによるハンドルリダイレクションの設定は作業が面倒です...セキュリティ属性の設定、エンドポイント閉鎖など。

あなたがそれを見たことがない場合、this MSDNの記事はCコードでリダイレクトを示しています。

関連する問題