我试图删除使用常规主要功能启动c++程序时打开的控制台窗口,并且在进行调试时仍将其保留,以便可以将输出发送到控制台。
为了测试这一点,我使用了我使用OpenGL 4.6编写的简单引擎。
我最终要做的是这个(我正在使用Windows和msvc编译器):
/DDEBUG
/SUBSYSTEM:windows /ENTRY:mainCRTStartup
。 #ifndef DEBUG
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#endif
现在最终发生的事情是,在“调试”模式下一切正常,但是在“发布”模式下,我的应用程序窗口没有显示,它只是创建了一个在后台运行的进程,我必须手动将其杀死。
如果我以管理员身份运行,则该应用程序在发行模式下可以正常工作。
因此,问题是:
为什么它在 Release模式下(无需终端)需要管理员权限,而在终端上却不需要它们?
我该如何解决?我宁愿我的应用程序不需要管理员权限才能运行。
最佳答案
您的定义需要_NDEBUG
,但是似乎有更好的方法来解决此问题。
您应该保留默认的wWinMain
入口点,而不是UCRT入口点,所有参数都移位一个。因此,请尝试将此操作写入控制台:
继续使用设置为WINDOWS
的子系统进行编译,并除去/ENTRY
标志。请改用wWinMain
。添加它以打开控制台。
AllocConsole();
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", “w”, stdout);
freopen("CONOUT$", "w", stderr);
wprintf(L"Console out write command.\r\n");
关于c++ - C++程序在后台运行,没有管理员权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59160602/