Избегание "Нажмите любую клавишу для продолжения" при запуске консольного приложения из Visual Studio

При запуске консольного приложения в Visual Studio через "Начать без отладки" (Ctrl + F5) консоль остается открытой в конце прогона с запросом

Нажмите любую клавишу, чтобы продолжить.,.

поэтому требуется активировать окно и нажать клавишу. Иногда это не подходит.

Почему это имеет значение: В настоящий момент я пишу код сериализации json, мой рабочий процесс выглядит следующим образом:

  • Применить код С#
  • запустите консольное приложение, которое пишет файл out.json
  • просмотреть out.json в браузере с помощью json viewer

делать это снова и снова, нет необходимости отлаживать что-либо, просто вырезать сериализацию и проверить выход хорошо.

Это рабочие процессы, подобные этому, где поведение "нажать любое..." затруднено, поскольку для этого требуются шаги

  • активировать окно консоли
  • нажмите клавишу .

Нет ответов:

  • Запуск приложения вне VS в отдельной консоли не является ответом.
  • Говоря, вам это не нужно.

Ответы

Ответ 1

Я уверен, что вы не можете повлиять или изменить это поведение.

Как вы помните, это не имеет никакого отношения к вашему приложению, потому что он не делает этого, когда вы дважды щелкаете по EXE. Вы видите этот эффект только при запуске приложения из Visual Studio без прикрепленного отладчика.

Предположительно, когда вы вызываете Ctrl + F5, Visual Studio запускает ваше приложение определенным образом, что заставляет окно консоли оставаться открытым. Я могу думать о двух способах, которые это может сделать:

%COMSPEC% /k "C:\Path\To\YourApplication.exe"

или

%COMSPEC% /c ""C:\Path\To\YourApplication.exe" & pause"

При любом из этих действий поведение приостановки, которое вы видите, выпекается прямо в команде, используемой для запуска вашего приложения, и поэтому является внешним для вашего приложения. Поэтому, если у вас нет доступа к источникам Visual Studio, вы не собираетесь его изменять. Вызов функции exit из вашего приложения не будет иметь никакого эффекта, потому что ваше приложение уже завершено к моменту появления этого сообщения.

Конечно, я не понимаю, почему это действительно важно, кроме вопроса любопытства. Этого не происходит, когда вы запускаете приложение с прикрепленным отладчиком, что вы будете делать в 99% случаев при запуске приложения из среды IDE. И поскольку вы не отправляете Visual Studio вместе с вашим приложением, ваши пользователи будут запускать приложение вне VS.


В ответ на обновления, внесенные в ваш вопрос, лучшим решением было бы изменить ваше приложение, чтобы оно не было консольным приложением. Такое поведение не влияет на стандартные приложения Windows; когда они закрываются, они закрываются навсегда.

Если вы не требуете вывода в окне консоли, это очень просто: просто измените "Тип приложения" в ваших свойствах проекта. Приложение Windows Forms будет работать отлично. Если вы не отобразите окно (aka form), оно не будет автоматически создано. В этом разница между обычными приложениями Windows и консольными приложениями, которые всегда создают консольное окно, независимо от того, нужен он вам или нет.

Если вам нужно отобразить вывод в окне консоли, у вас есть несколько вариантов:

  • Создайте и используйте простую форму с помощью элемента управления ListBox или ListView. Каждая строка, которую вы обычно выводите на консоль, вы добавляете в новый элемент в элемент управления списком. Это хорошо работает, если вы не используете какие-либо "расширенные" функции консоли.
  • P/Вызвать и вызвать функцию AllocConsole для создания консоли, которую может использовать приложение Windows. Вам не нужна форма для этого.

Ответ 2

Я нашел решение, которое работает, если вы используете python (я не смог проверить что-либо еще). Вам нужно перейти на

Инструменты → Параметры → Инструменты Python → Отладка

Снимите отметку Wait for input when process exits normally.

Надеюсь, вы сможете применить это как-то к своей проблеме.

Ответ 3

Ну, по крайней мере, в Visual Studio 2010, набрав

 Console.ReadKey(true);

Удаляет "Нажмите любую клавишу, чтобы продолжить....."

Ответ 4

Вы пробовали (С#)?

Environment.Exit(0)

Ответ 5

Здесь есть большой ответ на очень близкий вопрос:

fooobar.com/info/328467/...

Я думаю, что это лучше, чем принятый ответ, потому что он не требует, чтобы вы вызывали AllocConsole и настраивали любое перенаправление ввода-вывода. Я не знаю, как легко и надежно настроить перенаправление IO.