Подтвердить что ты не робот

Запуск приложения Windows и консольного приложения через Cmd

У меня есть вопрос любопытства относительно Console vs Windows Application при запуске приложения из Cmd, вызывающего exe напрямую.
Если приложение скомпилировано как консольное приложение (будет ссылаться на него как на мой ConApp), при запуске приложения через cmd, запрос ожидает завершения работы приложения, прежде чем продолжить. Однако, если приложение было скомпилировано как приложение Windows (будет ссылаться на него как на мой WinApp), запуск приложения с помощью cmd приведет к тому, что приложение будет запускать и забыть WinApp, понятно, что это ожидаемое поведение.
Чтобы WinApp остановил cmd от увольнения и забывания, нужно было бы запустить приложение в cmd с чем-то вроде "start\wait WinApp.exe", это приведет к тому, что приглашение Cmd ждет, пока WinApp перестанет работать до продолжая.
Мой вопрос в том, как Console Application сообщает Cmd, или как Cmd знает, что он должен оставаться открытым, а не запускать и забывать ConApp? И можно ли вызывать одно и то же поведение в моем WinApp, т.е. Мне не нужно называть "start\wait"?

Примечание:
Я играл с использованием AllocConsole и AttachConsole, однако при использовании AttachConsole (-1) в моем WinApp Cmd все еще запускает и перезапускает WinApp, однако WinApp, похоже, просто открывает новое окно консоли.

4b9b3361

Ответ 1

Эта информация хранится как часть части PEOptHeader двоичного формата EXE. В частности, поле Subsystem сообщает операционной системе, какой тип приложения это и может иметь следующие значения

  • 1: Родной
  • 2: Windows/GUI
  • 3: Windows без GUI
  • 5: OS/2
  • 7: POSIX

Это то, что сообщает окнам, какой тип программы он и, следовательно, дает возможность делать разные варианты, как это делает cmd.

Ссылка для документации

Ответ 2

Технические детали в стороне (JaredPar сделал действительно хорошую работу для этого), если вы хотите изменить свою программу с Windows/GUI на Windows non-GUI все, что вы необходимо выполнить вход в настройки вашего проекта и изменить раскрывающееся меню "Приложение Windows" на "Консольное приложение"

enter image description here

У вас может быть приложение Window, запускаемое как консольное приложение, и оно даст вам поведение, которое вы ожидаете. (обратите внимание, что теперь, если вы дважды щелкните по значку для программы, он откроет окно консоли, которое останется открытым, пока ваша программа открыта.)

enter image description here