回答
唯一的区别是,如果控制台应用程序不是从一个控制台启动(或者在启动时主动禁用控制台),则该控制台应用程序始终会生成控制台。另一方面,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