2014-01-07 82 views
12

啓動Windows應用程序VS控制檯應用程序我運行從Cmd的應用程序時,直接調用的exe關於控制檯VS Windows應用程序好奇的問題。
如果應用程序被編譯爲控制檯應用程序(將把它作爲我ConApp),通過CMD運行應用程序時,該應用的提示等待完成後再繼續行駛。但是,如果應用程序已被編譯爲一個Windows應用程序(將指它作爲我WinApp),通過CMD的提示將發射後不管的WinApp,可以理解這是預期的行爲開始應用。
要讓WinApp停止發射和遺忘cmd,必須在cmd中啓動應用程序,例如「start \ wait WinApp.exe」,這將導致Cmd提示符等待WinApp在繼續之前停止運行。
我解決這個問題是如何控制檯應用程序通知Cmd的,或如何Cmd的知道,它需要保持開放,而不是發射後不管的ConApp?而且是可以調用相同的行爲有點在我WinApp即,使得我沒有叫「開始\等待」嗎?

注:
WinApp使用AttachConsole(-1)時,我身邊有使用AllocConsole和AttachConsole,但是出場,Cmd的還是發射後忘記了WinApp但是WinApp似乎只需打開一個新的控制檯窗口。通過Cmd的

+0

您感興趣的技術細節或如何將程序從發射後不管模式更改爲等待模式? –

+1

可執行文件是否爲控制檯模式應用程序或本機Windows應用程序是否記錄在EXE文件的標頭中。 Cmd.exe看它知道該怎麼做。這不會幫助你解決任何問題。 –

回答

7

此信息存儲爲EXE二進制格式的PEOptHeader部的一部分。具體地,Subsystem字段告訴操作系統的應用程序類型,這是並且可以具有以下值

  • 1:母語
  • 2:視窗/ GUI
  • 3:視窗非GUI
  • 5 :OS/2
  • 7:POSIX

這是告訴窗口什麼類型的節目也因此賦予它使不同的能力如cmd所做的選擇。

Documentation Link

3

撇開技術細節(JaredPar did a really good job of doing that),如果你想你的程序Windows/GUI模式更改爲Windows non-GUI所有你需要做的就是去到您的項目設置和更改從「Windows應用程序的下拉「到‘控制檯應用程序’

enter image description here

你可以有一個窗口的應用程序運行作爲控制檯應用程序,它會給你你期望的行爲。 (但是請注意,現在,如果雙擊程序的圖標,它將打開一個控制檯窗口,該窗口在打開程序時保持打開狀態。)

enter image description here