回答
唯一的區別是,如果控制檯應用程序不是從一個控制檯啓動(或者在啓動時主動禁用控制檯),則該控制檯應用程序始終會生成控制檯。另一方面,Windows應用程序不生成控制檯。它可以仍附加到一個存在的控制檯或使用AllocConsole
創建一個新的控制檯。
這使得Windows應用程序更適合GUI應用程序或後臺應用程序,因爲您通常不希望爲這些應用程序創建終端窗口。
在更多技術說明中,控制檯和Windows可執行文件之間的唯一區別是exe
文件的PE標頭中的一個字節。手動切換此字節(例如,使用十六進制編輯器)可轉換應用程序類型。這是一個用於在VB6中創建控制檯應用程序的良好發佈的hack(其中未明確支持此類應用程序)。
要確定和更改應用程序的子系統類型,您需要閱讀PE標頭的各個部分。子系統數據的地址不是固定的,因爲它是可選文件頭的一部分,其位置由存儲在DOS文件頭中的地址(在成員e_lfanew
中)確定。該地址實際上指向_IMAGE_NT_HEADERS
記錄,該記錄又包括IMAGE_OPTIONAL_HEADER32
結構。這有一個int16
1)成員稱爲Subsystem
。 Windows應用程序的成員值爲2,控制檯應用程序的成員值爲3。其他子系統存在(特別是POSIX和內核)。 我已經寫了一個小的VB6應用程序來更改應用程序的子系統,它可以從ActiveVB作爲源代碼下載。
PE格式沒有很好的記錄,但是這個文件可以作爲一個介紹:Peering Inside the PE: A Tour of the Win32 Portable Executable File Format。
1)這並沒有真正否認我的要求只有一個字節的區別:此成員的最顯著字節始終爲0,只有至少顯著字節的變化。
當您啓動控制檯應用程序,命令提示符不會返回到控制檯應用程序退出:
控制檯應用程序從Windows命令行運行(開始/運行/ CMD)
一個窗口應用程序預設,所以你可以編寫在Windows環境中運行的GUI應用程序。
除了由康拉德·提到的區別,在命令提示符下交互調用時控制檯和Windows應用程序的行爲不同。 當您啓動一個Windows應用程序時,該命令立即返回。
這對於批處理文件不是這樣;他們會一直等到應用程序退出。 (您始終可以使用start
命令無需等待即可啓動應用程序。)
區別在於應用程序已被刪除。當您使用控制檯模板時,您將有一個存根將在控制檯中啓動。如果您已經在控制檯中運行,它將忽略打開一個控制檯的呼叫。
同樣,一個Windows應用程序是用默認的窗體設計的。如果你想清除它,你可以創建一個無窗口的Windows窗體應用程序,它本質上是一個沒有控制檯窗口的控制檯應用程序。
就應用程序的膽量而言,它們本質上是一樣的。主要區別是在編譯階段添加。
您可以更改與EDITBIN.exe(MSDN Entry on EDITBIN.exe)
- 1. Skript和控制檯之間的區別
- 2. 當從cmd運行控制檯和winforms應用程序之間的區別
- 3. 控制檯(/ SUBSYSTEM:CONSOLE)和Windows(/ SUBSYSTEM:WINDOWS)之間的區別
- 4. 空白的通用窗口應用程序和控制檯應用程序之間的區別
- 5. 從控制檯應用程序啓動進程和ASP.NET應用程序之間的區別
- 6. C#控制檯和Windows應用程序
- 7. 應用程序域和應用程序池之間的區別?
- 8. Windows服務和控制檯應用程序之間的權限差異
- 9. Java Swing應用程序與Netbeans平臺之間的區別Swing
- 10. C#和VB.NET控制檯會話之間的區別
- 11. 在Windows服務和控制檯應用程序之間共享目錄權限
- 12. WindowsForms與簡單控制檯應用程序的區別
- 13. 在Windows窗體應用程序和控制檯應用程序之間共享類/
- 14. UWP MapControl:用戶和應用程序操作之間的區別
- 15. 從控制檯應用程序切換到Windows應用程序
- 16. 從Windows XAML應用程序運行控制檯應用程序
- 17. 將控制檯應用程序轉換爲Windows應用程序
- 18. 控制檯應用程序。 VS Windows應用程序
- 19. C#控制檯應用程序之間的共享功能
- 20. 兩個控制檯應用程序之間的管道?
- 21. 控制結構php和控制結構之間的區別javascript
- 22. 桌面應用程序和Web應用程序之間的區別
- 23. Netbeans平臺和OSGI之間的區別
- 24. Firebug Net Panel和window.load time的定製控制檯定時器之間的區別
- 25. pm2停止和刪除應用程序之間的區別
- 26. java和C#之間的移動應用程序區別
- 27. 應用程序框架和UI框架之間的區別
- 28. iPhone和iPad應用程序之間的區別DidEnterBackground
- 29. REST API和Web應用程序之間的區別
- 30. view'did load'方法和'didFinishLaunching'應用程序之間的區別
感謝康拉德的子系統 - 偉大的:-) – 2009-02-22 13:24:33