Очень мало различий между консолью и приложением с графическим интерфейсом в Windows, и код stdio времени выполнения C обычно не заботится, он заботится только о стандартных дескрипторах Win32.
Основное отличие заключается в том, как CreateProcess
в родительском приложении работает.
Консольное приложение подключается к родительским стандартным дескрипторам Win32, если у родителя есть консоль.Если родительский объект не имеет консоли, для приложения создается новое окно консоли.Родитель может передать необязательные флаги CreateProcess
для принудительного / отклонения новой консоли.
Приложение с графическим интерфейсом не подключено к стандартным дескрипторам Win32, и новая консоль не создается.
Powershell.exe - это настоящее консольное приложение, которое может использовать стандартную обработку CreateProcess
.Поскольку ваше приложение не является консольным приложением, оно будет создано без стандартных дескрипторов, и поэтому ему некуда писать.
Терминальное приложение msys2, вероятно, не является настоящим консольным приложением и, вероятно, вызывает CreateProcess
с принудительными дескрипторами(* * тысяча двадцать одна).Эти ручки, вероятно, ручки для труб.Ваше приложение увидит эти дескрипторы как перенаправленные stdio-дескрипторы и будет работать аналогично тому, как cmd.exe будет выполнять yourconsoleapp.exe | otherconsoleapp.exe
.