Приложение может запускаться с параметрами. Есть необходимость вывести хелп с параметрами в этой же консоли, где было запущено приложение, если пользователь ошибся, скажем так. Как при запуске приложения в этой же консоли вывести сообщение?
Проблема в том, что cmd.exe не обрабатывает вывод приложений с графическим интерфейсом. При запуске оболочка проверяет флажок в заголовке исполняемого файла, и если приложение оконное, то оно запускается не блокируя консоль. После этого можно запустить другое приложение, выполнять команды, либо вовсе закрыть окно консоли. Соответственно, если после этого в консоли будут выводиться сообщения, то будет неясно от какого процесса они исходят.
Предлагаю рассмотреть альтернативные варианты:
С помощью Win32 присоединять консольный вывод к родительскому процессу через AttachConsole и насильно писать в него:
//импорт функции
[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
//присоединяемся к родительскому процессу
AttachConsole(-1)
//пишем в консоль
Console.WriteLine("Some message");
Это будет выглядеть странно, особенно если в консоли будет запущен другой процесс. Так же если понадобится перенаправление потока вывода, то его придется реализовывать самому.
ShowWindow, но полностью избежать его появления не получится.Как вариант можно создать новую консоль AllocConsole
//импорт функции
[DllImport("kernel32.dll")]
static extern bool AllocConsole();
//....
// Присоиденить консоль
AllocConsole();
и перед выводом её один раз вызвать. Будет создана новая консоль. (Одна консоль на один процесс, т.е. если вызвать из процесса повторно - две не будет).
Если нужно таки писать в родительскую консоль, то можно соиденить AttachConsole и AllocConsole например так
[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
[DllImport("kernel32.dll")]
static extern bool AllocConsole();
//
if (!AttachConsole(-1)) AllocConsole ();
но тогда может возникнуть "конфликт" - два приложения будут писать в одну консоль. Но если обе будут выводить "законченые" (всегда заканчивающиеся переводом каретки, например) и "простые" (без атрибутов цветов очистки экрана и т п) предложения - то возможно не будут мешать друг другу.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости