c++ - C++程序在后台运行,没有管理员权限

标签 c++ windows opengl compilation

我试图删除使用常规主要功能启动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/

    相关文章:

    c++ - 我正在用 OpenGL 编写一个程序来创建一个摆动的摆锤

    c# - 如何在 C# 中为不同的类传递函数指针委托(delegate)

    Windows NDIS 过滤器 - 如何检查端口是否被操作系统使用

    windows - Windows 上的 Git 2.13 条件配置

    OpenGL 着色器错误 : 0:1: '' : syntax error #version

    OpenGL 透明度做了奇怪的事情

    C++ .NET - 如何处理位图?

    c++ - Qt 应用程序 UI 元素在 Docker 中随机呈现为空白/黑色

    c++ - 如何在Qt中使用谷歌地图

    python - 编写程序/脚本以从一堆文件名的开头删除相同的字符串的最简单方法是什么?