控制台分配策略

注释

此功能需要 Windows 11 24H2(内部版本 26100)或更高版本。

Windows 上的大多数应用程序都是 IMAGE_SUBSYSTEM_WINDOWS_GUIIMAGE_SUBSYSTEM_WINDOWS_CUI 类型。 前者是典型的图形化窗口化应用程序,而后者通常称为控制台或终端应用程序。 当运行标记为 IMAGE_SUBSYSTEM_WINDOWS_CUI 的应用程序时,它将被分配一个控制台,除非它在现有的控制台会话中执行。 此外,在 CMD 或 PowerShell 等 shell 中执行此类应用程序将阻止,直到应用程序完成执行。 这两个都不适用于 IMAGE_SUBSYSTEM_WINDOWS_GUI 应用程序。 不会为其分配控制台,也不会在 shell 中阻塞执行。

现在,假如您想编写一个在资源管理器中运行时看起来像图形应用程序的应用程序,但如果是在现有控制台会话中运行,那么您还可以将调试输出写入控制台。 为此,请将应用程序构建为 IMAGE_SUBSYSTEM_WINDOWS_CUI 一个(例如在 MSVC 中使用 /SUBSYSTEM:CONSOLE ),并添加以下应用程序清单:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <application>
    <windowsSettings>
      <consoleAllocationPolicy xmlns="http://schemas.microsoft.com/SMI/2024/WindowsSettings">detached</consoleAllocationPolicy>
    </windowsSettings>
  </application>
</assembly>

IMAGE_SUBSYSTEM_WINDOWS_CUI 类型通知 shell 需等待应用执行完毕,而应用程序清单则通知操作系统跳过分配控制台。

要求

   
支持的最低客户端 Windows 11 24H2 (内部版本 26100) [仅限桌面应用]
支持的最低服务器 Windows Server 2025(内部版本 26100)

另请参阅

AllocConsoleWithOptions