Задръжте cmd.exe отворен на Vista

Пиша C++ конзолни програми. След компилиране, когато стартирам програмата от моя файлов браузър, 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

Винаги съм бил фен на простото създаване на пакетен файл, който извиква вашата програма и след това извиква пауза

Prog.exe Пауза

Това ще даде хубава подкана „Натиснете произволен клавиш, за да продължите...“, проста е и не изисква промяна на програмата.

person Arelius    schedule 07.06.2009
comment
Харесва ми да добавя скрипт за автоматична бърза клавиша, за да има пряк път, който стартира пакетния файл. Още по-лесно. - 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 Explorer. Програмите, стартирани от Explorer, не подлежат на точки на прекъсване, защото не се отстраняват грешки. - person Rob Kennedy; 08.06.2009
comment
@Rob Kennedy: Разбирам, модифицирах отговора си, за да посоча, че това се отнася само за когато го изпълнявате от визуално студио. - person Brian R. Bondy; 08.06.2009