Си шарп как сделать чтобы консоль не закрывалась

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

Моя проблема в том, что в Windows есть окна командной строки, которые закрываются сразу после выполнения. Чтобы решить эту проблему, я хочу, чтобы поведение по умолчанию состояло в том, что окно остается открытым. Обычно этого поведения можно избежать с помощью трех методов, которые мне приходят в голову:

  1. Поместите строку pause после пакетных программ, чтобы предложить пользователю нажать клавишу перед выходом
  2. Запуск этих командных файлов или других инструментов управления командной строкой (даже запуск службы, перезапуск и т. д. с помощью net start xy или что-то подобное) в пределах cmd.exe (Start - Run - cmd.exe)
  3. Запуск этих программ с помощью cmd /k следующим образом: cmd /k myprogram.bat

Но есть и другие случаи, в которых пользователь:

Я прочитал статью об изменении поведения по умолчанию cmd.exe при открытии его явно, с созданием Запись AutoRun и управление его содержимым в этих местах:

(Элементы автозапуска _String values_ . )

Я поместил cmd /d /k в качестве значения, чтобы попробовать, но это не изменило поведение упомянутых материалов выше всего . Он просто изменил поведение окна командной строки при открытии его явно (Start-Run-cmd.exe).

Итак, как это работает? Можете ли вы дать мне какие-либо идеи для решения этой проблемы?

У меня есть решение, которое может применяться только к .cmd и .bat :

Откройте regedit и перейдите к каждому из них:

Обратите внимание, что это похоже на использование cmd.exe /c cmd.exe /k program.bat , что означает, что другой экземпляр CMD будет запущен в родительский. Я не мог найти, как перезаписать первый аргумент /c .

Вы также можете сделать это с помощью [exefile] , но теперь он отобразит пустой консольный блок, если исполняемый файл имеет графический интерфейс.

Консоль закрывается, когда последний подключенный к ней процесс завершает работу или вызывает FreeConsole.

Другими словами, окно консоли Win32 всегда будет закрыто, когда последняя запущенная в нем программа выйдет, и вы не можете изменить это.

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

cmd.exe /k даст вам проблемы с некоторыми партиями. Если пакет exit 1 (без /B ) ваша консоль будет закрыта. Трюк заключается в том, чтобы использовать:

Чтобы использовать это по умолчанию для всех пакетных файлов, установите HKEY_CLASSES_ROOT\cmdfile\shell\open\command\(default) и HKEY_CLASSES_ROOT\batfile\shell\open\command\(default) до "%windir%\system32\cmd.exe" /k "%windir%\system32\cmd" /c "%1" %* .

Я просто нажал на немое решение после прочтения ответа grawity .

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

Мое решение (только что протестированное на Win7) как добавить cmd в качестве последней строки в пакетном файле. Это запускает вложенную командную строку, которая наследует среду его родителя. Эта дочерняя оболочка хранит пакетный процесс открытым до тех пор, пока вы не выйдете, и в этот момент пакет не имеет дочерних процессов и также выходит.

Вместо использования PAUSE (я предпочитаю CHOICE или TIMEOUT использовать PAUSE при необходимости), вы можете использовать это решение здесь: 886848 /как в изготовление витрины-пакетный файл пауза-когда-двойной щелчок .

Используя CHOICE, вы можете запрограммировать возможность выбора пользователем различных действий, и использование TIMEOUT позволяет закрыть окно после задержки (без присмотра). Если вы запускаете командный файл из окна командной строки, эти паузы могут быть раздражающими.

Связанное решение позволит вам решить, хотите ли вы пропустить паузы, если пакетный файл был запущен из окна командной строки.

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

, чтобы определить, был ли командный файл запущен из окна команд или нет.

Итак, вы используете его следующим образом:

В момент выхода командного файла вы добавите следующий код:

Лучший способ, который я нашел, чтобы обойти это, - вызвать ваши командные файлы из другого командного файла с помощью start.

, поэтому, если вы обычно запускаете файл с именем go.bat, тогда вы создадите второй командный файл с именем go2.bat

содержимое go2.bat будет просто

первое окно немедленно закрывается, но тот, который запускает ваш go.bat, остается открытым

Это работает для версии 5.00 редактора реестра Windows.

Сохраните указанные выше cmds в файле, который называется что-то вроде cmdbatfile-open.reg и выполните его!

Предположим, у вас есть два командных файла, которые вы хотите запустить в своем собственном экземпляре, и не открывайте их, если их исполняемый файл выйдет. Позволяет называть эти две партии A.bat и B.bat .

Теперь для простоты вы можете запустить пакетный файл для их обоих, назовем это launch_both.bat с содержимым:

Он может работать не так, как ожидалось, если вы вызываете exit в одном из двух пакетных файлов. Это нужно протестировать.

Для Windows 10, если у вас есть доступ к скрипту, вам нужно добавить следующий код в конце:

Этот код будет ждать ввода перед закрытием.

С другой стороны:

НЕ работал (запрос cmd перевернулся, и на самом деле вернул ошибку (1)). Спасибо PSIXO за ответ, который мне нужен. Генри.

Похожие вопросы

Популярные теги

5fba0ac498166984290930.jpg

Чтобы автоматически закрывать консоль при остановке отладки, включите параметр "Сервис" ->"Параметры" ->"Отладка" -> "Автоматически закрыть консоль при остановке отладки".

magggi

но мне не нужно закрывать консоль, там так, программа работает как надо все выводит, есть результат и вот это то что на фото, можно ли это не отоброжать?

hePPer

magggi

magggi

resolut1123

Нужно прописать в конце программы system("pause"); Потом нужно собрать решение, потому что внутри IDE консоль удерживается и насколько знаю даже не закрывается командами exit(0). Если у тебя Visual Studio, Нажми на "Сборка - собрать решение", потом перейди в папку с проектом и в Debug будет exe файл твоей программы.

Командная строка, будучи запущенной, закроется только тогда, когда пользователь нажмет кнопку завершения работы или выполнит в ней команду exit. Но бывает и такое, что после командная строка закрывается сама, не сообщая пользователю о результатах отработанного сценария и не сообщая о причинах закрытия. Как правило, с таким поведением консоли приходится сталкиваться при выполнении скриптов — CMD или BAT -файлов.

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

Ну что же, понудить ее изменить свое поведения очень просто. Самый простой способ — это добавить в конец командного файла команду pause или специальный ключ, запускающую копию командной строки.

Команда pause

Главное, чтобы у вас имелись права на редактирование этого самого скрипта.

Отройте скрипт Блокнотом или любым другим текстовым редактором и добавьте в самый конец кода команду pause или cmd /k.

Команда cmd /k

Это два разных способа и работают они по-разному.

CMD

Команда cmd /k работает несколько иначе.

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

Cmd /k

Если же добавить cmd /k в середину кода, его выполнение будет прервано и прекращено.

В этом основная разница между этими командами.

Тонкая настройка командной строки

Если нет желания возиться с каждым командным файлом, отредактируйте параметры работы самой командной строки.

Для этого открываем командой regedit редактор реестра и разворачиваем ветку:

HKCR\batfile\shell\open\command

В правой колонке меняем значение параметра по умолчанию с "%1" %* на cmd.exe /k "%1" %*.

RegEdit

Тоже самое проделываем с параметром по умолчанию в ветке HKCR\cmdfile\shell\open\command , для командных файлов формата CMD .

RegEdit

Вот и всё, отныне командная строка будет закрываться только по решению юзера, если только в сценарий не прописана команда exit .

Ладно, значит, у меня проблема. Мой код печатает текст, давая возможность ввести любую из трех вещей. Если вы наберете один из них, он напишет строку. Но по какой-то причине он просто закрывается мгновенно (в visual studio я бы использовал Ctrl + f5) после печати текста, но из-за того, что я пытаюсь запустить его из .exe, я не могу этого сделать. Как сделать так, чтобы окно оставалось открытым и не закрывалось после печати результата?

Заранее извините за плохое форматирование (на всякий случай).

2 ответа

Можно ли (и если да, то как) заставить одну программу работать как консольное приложение, так и версию GUI с использованием Delphi 2007? Я хочу сказать, что если программа запускается с соответствующими параметрами командной строки, она должна функционировать как консольная программа, выводя.

Я хочу сделать программу C , которая случайным образом выбирает 6 чисел из числа диапазона 1 - 37 , не повторяя никаких ранее перестановок. Например, предположим, что программа случайным образом выбирает 1,2,3,4,5,6 . Если следующая перестановка случайно выбрана как 2,1,3,4,5,6 , то это OK. Однако.

Если вы ничего не скажете приложению, оно просто завершит работу. Например, вы можете добавить эту строку в конце метода Main() :

Это говорит программе подождать, пока не будет нажата другая клавиша.

Используйте while loop, на основе некоторых введенных ключей вы можете выйти из цикла.

Похожие вопросы:

Я пишу консольную программу. Программа ничего не печатает. Таким образом, ему не нужно консольное окно. Я попытался вызвать функцию FreeConsole() в начальной точке программы. Когда я выполняю.

Я начал пытаться выучить C++ сегодня вечером и сейчас просто валяю дурака в IDE. Как сделать так, чтобы эта простая программа не закрывалась до тех пор, пока вы не угадаете правильное число (5, 6.

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

Можно ли (и если да, то как) заставить одну программу работать как консольное приложение, так и версию GUI с использованием Delphi 2007? Я хочу сказать, что если программа запускается с.

Я хочу сделать программу C , которая случайным образом выбирает 6 чисел из числа диапазона 1 - 37 , не повторяя никаких ранее перестановок. Например, предположим, что программа случайным образом.

Я преподаю класс программирования начального уровня C++. Мы используем только iostream в классе (No GUI). Похоже, студенты не так уж и рады распечатывать строки и цифры на своей консоли.

Я делаю программу, которая представляет собой вектор списков. Он отслеживает Слово и номер строки, на которой это слово было найдено. пример: teddy bears are cute so are you таким образом, он будет.

Я хочу, чтобы моя программа python 2.7 получала индекс конкретных символов в строке. Так вот как это: Получите индекс скобок [ и ] в любой строке. Например: Hello World [These brackets] Hello World.

Я, по-видимому, могу обнаружить, что моя программа c++ закрыта следующим кодом static BOOL WINAPI console_ctrl_handler(DWORD dwCtrlType) < switch (dwCtrlType) < case CTRL_C_EVENT: // Ctrl+C case.

Читайте также: