Partager via


Stratégie d’allocation de console

Remarque

Cette fonctionnalité nécessite Windows 11 24H2 (build 26100) ou version ultérieure.

La plupart des applications sur Windows sont de type IMAGE_SUBSYSTEM_WINDOWS_GUI ou IMAGE_SUBSYSTEM_WINDOWS_CUI . Il s’agit d’une application graphique classique, fenêtrée, tandis que cette dernière est communément appelée application console ou terminale. Lors de l’exécution d’une application marquée comme IMAGE_SUBSYSTEM_WINDOWS_CUI elle sera allouée à une console, sauf si elle est exécutée à l’intérieur d’une session de console existante. En outre, l’exécution d’une telle application à l’intérieur d’un interpréteur de commandes tel que CMD ou PowerShell se bloque jusqu’à ce que l’application ait terminé l’exécution. Aucun de ces éléments n’est vrai pour les applications IMAGE_SUBSYSTEM_WINDOWS_GUI . Il ne se verra pas allouer de console, ni bloquer l'exécution à l'intérieur d'un interpréteur.

Que se passe-t-il si vous souhaitez écrire une application qui ressemble à une application graphique lors de l’exécution à partir de l’Explorateur, mais vous pouvez également écrire une sortie de débogage dans la console, si elle est exécutée à l’intérieur d’une session de console existante ? Pour ce faire, générez votre application en tant que IMAGE_SUBSYSTEM_WINDOWS_CUI une (par exemple avec /SUBSYSTEM :CONSOLE dans MSVC) et ajoutez le manifeste d’application suivant :

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

Le type IMAGE_SUBSYSTEM_WINDOWS_CUI informe les interpréteurs qu’ils doivent bloquer tant que votre application n’a pas terminé l’exécution, tandis que le manifeste de l’application informe le système d’exploitation d’ignorer l’allocation d’une console.

Spécifications

   
Client minimal pris en charge Windows 11 24H2 (build 26100) [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2025 (build 26100)

Voir aussi

AllocConsoleWithOptions