2011-06-16 53 views
9

我一直在試圖理解這兩個進程創建標誌之間的區別。 msdn documentation不清楚這個區別。用於createProcess函數的DETACH_PROCESS和CREATE_NO_WINDOW進程創建標誌有什麼區別

  • 不CREATE_NO_WINDOW使處理有一個控制檯(標準輸入/輸出流初始化)而不顯示的窗口,而DETACH_PROCESS沒有控制檯呢?
  • 這對孩子的孩子過程有什麼影響?
  • 什麼是行爲矩陣,描述每個組合(父母有控制檯,父母沒有控制檯)會發生什麼X(子可執行文件需要控制檯(主),子可執行文件不需要控制檯(WinMain))。 ?
+0

你是什麼意思的「每個組合」? MSDN明確指出:「*如果應用程序不是控制檯應用程序,或者它與CREATE_NEW_CONSOLE或DETACHED_PROCESS。*」用於CREATE_NO_WINDOW',則忽略此標誌。所以在某種意義上它們是相互排斥的。 – 0xC0000022L 2011-06-16 17:13:17

+0

我是指作爲控制檯或非控制檯可執行文件的孩子和父母的組合。如果父節點是非控制檯應用程序,並且我使用DETACH_PROCESS標誌從它啓動了一個控制檯應用程序,那麼如果需要控制檯,該子節點將會出錯。 – Manny 2011-06-17 13:11:29

+0

完全依賴於C運行時的實現。如果我沒有記錯,MSVCRT在這種情況下不會造成問題。其他運行時可能。 – 0xC0000022L 2011-06-17 20:59:17

回答

13

不同之處在於啓動過程可以執行的操作。在這兩種情況下,它都不會有控制檯。但是使用CREATE_NO_WINDOW選項,它可以調用AttachConsole(ATTACH_PARENT_PROCESS)並訪問父級控制檯窗口(如果可用)。當你指定DETACH_PROCESS時,這顯然不起作用。然後,唯一的選擇是讓啓動的進程使用AllocConsole()創建自己的控制檯。

或者換句話說,您可以確定啓動的進程永遠無法使用DETACH_PROCESS進入您自己的控制檯。

+1

隨機注意:powershell不*像* DETACH_PROCESS。 – 2016-11-29 04:31:32

相關問題