Я думаю, что предпочтительным методом для ситуации здесь является метод ".com" и ".exe". В Windows из командной строки, если вы запускаете программу и не указываете расширение, порядок расположения исполняемого файла будет иметь приоритет .com, а не файл .exe .
Затем вы можете использовать хитрости, чтобы этот .com был прокси для stdin / stdout / stderr и запустить файл с тем же именем .exe. Это дает поведение, позволяющее программе выполнять преформу в режиме командной строки при вызове из консоли (возможно, только при обнаружении определенных аргументов командной строки), при этом все еще имея возможность запускаться как приложение с графическим интерфейсом без консоли.
Существуют различные статьи, описывающие это, например, «Как сделать приложение как графическим, так и консольным приложением?» (см. ссылки в ссылке ниже).
Я разместил проект под названием dualsubsystem в коде Google , который обновляет старое решение Codeguru для этой техники и предоставляет исходный код и исполняемые файлы с примерами.
Надеюсь, это полезно!