Sdílet prostřednictvím


Zásady přidělování konzoly

Poznámka:

Tato funkce vyžaduje Windows 11 24H2 (build 26100) nebo novější.

Většina aplikací ve Windows je typu IMAGE_SUBSYSTEM_WINDOWS_GUI nebo IMAGE_SUBSYSTEM_WINDOWS_CUI . První je typická grafická aplikace s oknem, zatímco druhá aplikace se běžně označuje jako konzola nebo terminálová aplikace. Při spuštění aplikace označené jako IMAGE_SUBSYSTEM_WINDOWS_CUI jí bude přidělena konzola, ledaže by byla spuštěna v již existující relaci konzoly. Kromě toho bude provedení takové aplikace v prostředí, jako je CMD nebo PowerShell, zablokováno, dokud se aplikace nedokončí. Žádná z těchto možností není pro IMAGE_SUBSYSTEM_WINDOWS_GUI aplikace pravdivá. Konzola nebude přidělena a nebude blokovat provádění uvnitř shellu.

Co když chcete napsat aplikaci, která vypadá jako grafická aplikace při spuštění z Průzkumníka, ale můžete také zapsat výstup ladění do konzoly, pokud se spustí uvnitř existující konzolové relace? Chcete-li toho dosáhnout, sestavte aplikaci jako IMAGE_SUBSYSTEM_WINDOWS_CUI jednu (například pomocí /SUBSYSTEM:CONSOLE v MSVC) a přidejte následující manifest aplikace:

<?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>

Typ IMAGE_SUBSYSTEM_WINDOWS_CUI informuje prostředí, že musí blokovat, dokud vaše aplikace nedokončí provádění, zatímco manifest aplikace informuje operační systém, aby nepřiděloval konzoli.

Požadavky

   
Minimální podporovaný klient Windows 11 24H2 (build 26100) [jenom desktopové aplikace]
Minimální podporovaný server Windows Server 2025 (build 26100)

Viz také

AllocConsoleWithOptions