Держите cmd.exe открытым в Vista

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

Единственный способ обойти это, который я нашел, - запустить программу изнутри cmd.exe.

Есть ли способ оставить cmd.exe открытым после завершения работы программы?

Есть ли настройка, которую я могу где-то изменить? Я не хочу запускать пакетный скрипт с помощью cmd.exe /K

Спасибо!

[Изменить] Не знаю, имеет ли это значение, но у меня Vista x64


person hahuang65    schedule 07.06.2009    source источник
comment
Возможно, попробуйте Console2: ( sourceforge.net/projects/console ). Хотя я не уверен, что он работает на 64-битной Vista.   -  person mechanical_meat    schedule 08.06.2009
comment
Он работает нормально, но это то же самое в этом случае.   -  person toto    schedule 08.06.2009


Ответы (5)


Сделайте так, чтобы ваше приложение запрашивало нажатие клавиши перед выходом — это самое простое решение!

person Chris Harris    schedule 07.06.2009
comment
Я думал об этом, но я хотел знать, могу ли я изменить, чтобы cmd.exe оставался открытым глобально. Можно ли что-нибудь сделать с cmd.exe? - person hahuang65; 08.06.2009
comment
Не со времен Windows 98, нет. Вы можете поместить вокруг него пакетные файлы, которые, по сути, просто запускают вашу программу и после этого делают паузу. Или вы можете поместить новую запись в контекстное меню программы с помощью командной строки cmd /c %1 и паузы. - person Joey; 08.06.2009
comment
Кроме того, это то, что вы обычно делали в дни DOS с ide, в противном случае он просто переключался обратно на отладчик... - person SurDin; 08.06.2009
comment
Обратите внимание, что если вы запускаете свою программу непосредственно из файлового менеджера, cmd.exe вообще не участвует в этом. Невозможно остановить автоматическое закрытие cmd.exe, потому что он никогда не открывался! - person Spire; 08.06.2009
comment
Spire прав: cmd.exe — это просто программа, которая запускается с использованием подсистемы CONSOLE. Вы можете выбрать, какую подсистему будет использовать компилируемая программа с флагом /SUBSYSTEM для LINK.EXE: msdn.microsoft.com/en-us/library/fcc1zstk(vs.71).aspx - person j_random_hacker; 08.06.2009
comment
@Johannes: я собирался предложить && вместо &, поскольку я не слышал о последнем, но, конечно же, ваш & лучше - он выполнит вторую команду, даже если первая не удастся. Я кое-что узнал :) - person j_random_hacker; 08.06.2009
comment
В любом случае вы не хотите, чтобы CMD.EXE был открыт глобально. Это обязательно повлияет на другие программы, которые ожидают его закрытия. - person MSalters; 08.06.2009

Вы можете настроить ярлык с помощью переключателя /K при запуске cmd.exe, чтобы он не завершался после выполнения данной команды:

 cmd.exe /K YourProgram.exe
person Doug T.    schedule 07.06.2009
comment
cmd.exe /c YourProgram.exe & Pause выполнит задание ожидания и затем закроется - person Totonga; 11.06.2009

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

Прог.exe Пауза

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

person Arelius    schedule 07.06.2009
comment
Мне нравится добавлять скрипт autohotkey, чтобы иметь ярлык, который запускает пакетный файл. Еще проще. - person toto; 08.06.2009

В качестве последней строки вашей функции main() вы можете добавить эту строку:

system("PAUSE");

Кроме того, убедитесь, что #include <stdlib.h> объявляет функцию system(). Это заставит консоль приостановиться. Однако, если ваша программа запускается изнутри cmd.exe, она все равно будет приостанавливаться, что может быть нежелательно.

person Adam Rosenfield    schedule 07.06.2009
comment
вызовы system() плохие. Введите это в Google, чтобы увидеть длинный список причин, которые не подходят для этого комментария. - person Gordon; 02.06.2010

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

Лучше всего установить точку останова прямо перед завершением программы.

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

Я думаю, что лучше не запрашивать ввод и вместо этого запускать вашу программу из запущенной командной строки.

person Brian R. Bondy    schedule 07.06.2009
comment
Точка останова? Нравится _asm int 3? Вот это мужественное нажатие клавиши! - person toto; 08.06.2009
comment
Нет... Как красная точка в VS IDE. Тот, который не внедряет код в скомпилированный .exe. - person Brian R. Bondy; 08.06.2009
comment
Но проблема была в том, что консоль слишком быстро уходила при запуске программы из файлового браузера. То есть из Проводника Windows. Программы, запускаемые проводником, не подвергаются точкам останова, потому что они не отлаживаются. - person Rob Kennedy; 08.06.2009
comment
@Rob Kennedy: Понятно, я изменил свой ответ, чтобы указать, что это применимо только к запуску из Visual Studio. - person Brian R. Bondy; 08.06.2009