Visual Studio运行程序如何阻止命令提示符弹窗且无需修改main函数?
配置实现方法
出现该差异的核心原因是旧项目除了修改子系统配置外,还额外指定了链接器入口点,你只修改子系统参数的情况下就会触发WinMain的要求,按照以下步骤操作即可复现旧项目的效果:
- 右键项目打开「属性」页,顶部的配置项选择「所有配置」、平台选择「所有平台」,避免只修改单配置生效的问题
- 依次展开
配置属性→链接器→系统,确认「子系统」设置为Windows (/SUBSYSTEM:WINDOWS) - 依次展开
配置属性→链接器→高级,找到「入口点」配置项,根据你的项目字符集填入对应值:- 多字节字符集项目填入
mainCRTStartup - Unicode字符集项目填入
wmainCRTStartup
- 多字节字符集项目填入
- 保存配置后重新编译项目,原有普通main函数无需修改,运行时也不会弹出命令提示符窗口
原理解释
C运行时库(CRT)内置了多套初始化入口逻辑:
- 子系统为CONSOLE时,默认入口点为
mainCRTStartup/wmainCRTStartup,内部会调用用户编写的main/wmain函数,同时自动创建控制台窗口 - 子系统为WINDOWS时,默认入口点为
WinMainCRTStartup/wWinMainCRTStartup,内部会调用用户编写的WinMain/wWinMain函数,不会创建控制台窗口
手动指定入口点为main系的CRT初始化函数后,链接器会跳过WinMain的检查,正常调用你编写的普通main函数,同时因为子系统配置为WINDOWS,不会额外创建控制台窗口,就能实现你要的效果。
内容的提问来源于stack exchange,提问作者JensB
相关产品推荐
相关产品推荐

