Udostępnij przez


Zasady alokacji konsoli

Uwaga / Notatka

Ta funkcja wymaga systemu Windows 11 24H2 (kompilacja 26100) lub nowszego.

Większość aplikacji w systemie Windows jest typu IMAGE_SUBSYSTEM_WINDOWS_GUI lub IMAGE_SUBSYSTEM_WINDOWS_CUI . Pierwszy z nich to typowa aplikacja graficzna z interfejsem okienkowym, natomiast drugi rodzaj to aplikacja, która jest często nazywana konsolową lub terminalową. Podczas uruchamiania aplikacji oznaczonej jako IMAGE_SUBSYSTEM_WINDOWS_CUI zostanie przydzielona konsola, chyba że zostanie wykonana w istniejącej sesji konsoli. Ponadto wykonanie takiej aplikacji wewnątrz powłoki, takiej jak CMD lub PowerShell, zostanie zablokowane aż do momentu zakończenia wykonywania aplikacji. Żadna z nich nie jest prawdziwa w przypadku aplikacji IMAGE_SUBSYSTEM_WINDOWS_GUI . Nie zostanie przydzielona konsola ani nie będzie blokować wykonywania wewnątrz powłoki.

Teraz co zrobić, jeśli chcesz napisać aplikację, która wydaje się aplikacją graficzną po uruchomieniu z Eksploratora, i jednocześnie możesz zapisać informacje debugowania w konsoli, jeśli zostanie uruchomiona w istniejącej sesji konsoli? Aby to osiągnąć, skompiluj aplikację jako IMAGE_SUBSYSTEM_WINDOWS_CUI (na przykład za pomocą /SUBSYSTEM:CONSOLE w MSVC) i dodaj następujący manifest aplikacji:

<?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 powłoki o konieczności zablokowania ich do momentu zakończenia działania aplikacji, podczas gdy manifest aplikacji informuje system operacyjny o zaniechaniu przydzielania konsoli.

Wymagania

   
Minimalny obsługiwany klient Windows 11 24H2 (kompilacja 26100) [tylko aplikacje klasyczne]
Minimalny obsługiwany serwer Windows Server 2025 (kompilacja 26100)

Zobacz także

AllocConsoleWithOptions