隐藏Windows应用程序的控制台

ufu*_*gun 49 windows console qt hide visual-studio

我有一个Qt应用程序,当我运行这个应用程序时,它背后有一个控制台.在开发中它很好,因为我在控制台上看到调试输出,但是当我想将这个可执行文件提供给客户时,应该没有控制台窗口.我怎么隐藏它?

(我使用的是Visual Studio 2008)

dat*_*olf 109

在项目构建链接器选项集中

/SUBSYSTEM:windows
/ENTRY:mainCRTStartup
Run Code Online (Sandbox Code Playgroud)

或者在源文件中使用以下#pragmaint main(...)

#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
Run Code Online (Sandbox Code Playgroud)

  • Imo是最好的和最重要的答案,处理子系统部分和不同的入口点部分.小的unicode提示:如果使用unicode进行编译并且使用wmain而不是main,则注释应为"/ ENTRY:wmainCRTStartup". (4认同)
  • @GuyJoelMcLean:Pro-Tipp:如果以后需要控制台进行调试,可以使用AllocConsole http://msdn.microsoft.com/en-us/library/windows/desktop/ms681944(v=vs.85).aspx (2认同)
  • 在 VS 2010 中,编译指示对我不起作用。我必须通过项目属性设置这两个设置,从预处理器中删除 _CONSOLE。然后我重建,它完美地工作。 (2认同)

Han*_*ant 50

听起来您的链接器配置不正确.右键单击项目,"属性","链接器","系统","子系统"设置.确保选中"Windows",而不是"控制台".

并且,将main()更改为WinMain().

  • 您还可以在属性 - >链接器 - >高级 - >入口点中将项目的入口点设置为标准`main()` (6认同)
  • 问题是,当我在`Windows`中打开程序时,它不会终止,即使我修复了`main` /`WinMain`问题. (2认同)

Dan*_*noz 16

你可以通过调用以删除控制台:

FreeConsole();
Run Code Online (Sandbox Code Playgroud)


ufu*_*gun 12

我使用那种方法,它的工作原理

HWND hwnd = GetConsoleWindow();
ShowWindow(hwnd, 0);
Run Code Online (Sandbox Code Playgroud)

  • 如果从命令行启动程序,命令行将消失.`FreeConsole`没有那个问题. (5认同)

小智 8

下一个解决方案;

环境:WixXP x64,msvs 2008,Qt v4.5.3

  1. 设置项目设置/配置属性/链接器/系统/子系统= Windows(/ SUBSYSTEM:WINDOWS)

    但是对于x64,存在链接器错误:LNK2019:函数_WinMainCRTStartup中引用的未解析的外部符号_WinMain"为了避免它

  2. 替换以下代码:

    int main(int argc, char *argv[])
    {
         QApplication app(argc, argv);
         // your code*
    }
    
    Run Code Online (Sandbox Code Playgroud)

    通过

    int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char*, int nShowCmd)
    {
        int argc = 0;
        QApplication app( argc, 0 );
     }
    
    Run Code Online (Sandbox Code Playgroud)

它适用于两者 - Win32和x64平台.


小智 6

如果使用属性 - > 链接器 - > 系统 - > 子系统 | 视窗

并获得链接器错误.

您可以查看链接器 - > 高级 - > 入口点

并将值设置为"main"函数的名称.

如果您的主要功能是"主要",那么您的入口点将成为主要部分.


Wil*_*cat 5

可能是更好的选择,不是简单地删除(如Andy M建议)但编辑*.pro文件添加类似的东西

CONFIG(debug, debug|release) {
    CONFIG *= console
} 
else {
    CONFIG -= console
}
Run Code Online (Sandbox Code Playgroud)

在调试中,您可以看到控制台窗口,但不能发布.我喜欢.=)