2011-12-23 64 views
0

我想要創建一個子句進程的句柄繼承爲false和控制檯重定向。 爲了這個,我創建stdinput NAMEPIPE處理和繼承設置爲true這個手柄和結構添加它StartupinfoEX,我給CreateProcess的StartupinfoEX和控制檯重定向

的probleme是後發送,子進程得到正確的處理(我在進程資源管理器中檢查它)但是控制檯重定向沒有被分配(它看起來像前一個句柄沒有被分配給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

這只是您的代碼子集中的一小部分,可能會被視爲與您的問題相關。例如,設置STARTUPINFOEX的lpAttributeList成員的代碼在哪裏? – 2011-12-23 22:49:42

+0

關於句柄繼承:http://blogs.msdn.com/b/oldnewthing/archive/2011/12/16/10248328.aspx – avakar 2011-12-24 08:33:15

回答

0

嘗試發佈最小化編譯&可運行的示例 - 大部分設置代碼在代碼片段中缺失,並且使用管道處理重定向設置有點挑剔,無法工作......您需要設置安全屬性,處理重複,終點關閉等。

如果您還沒有看到它,this MSDN文章顯示用C代碼重定向。