Приложение может запускаться с параметрами. Есть необходимость вывести хелп с параметрами в этой же консоли, где было запущено приложение, если пользователь ошибся, скажем так. Как при запуске приложения в этой же консоли вывести сообщение?
Проблема в том, что 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 ();
но тогда может возникнуть "конфликт" - два приложения будут писать в одну консоль. Но если обе будут выводить "законченые" (всегда заканчивающиеся переводом каретки, например) и "простые" (без атрибутов цветов очистки экрана и т п) предложения - то возможно не будут мешать друг другу.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Имеется форма, на которой расположен DataGridView и к ней BindingNavigator, созданный автоматически