Создайте новое окно cmd.exe из другого приглашения cmd.exe

102

Я настраиваю CruiseControl.NET. Проблема, с которой я столкнулся, заключается в том, что я запускаю CC как консольное приложение, и когда моя сборка успешно завершается и выполняется (с использованием exec), она запускает ее в приглашении CruiseControl DOS. Я просто использую простые пакетные файлы для запуска своего приложения, но запуск его в том же запросе, что и CC, заставляет CC думать, что сборка продолжается, пока выполняется мое приложение.

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

Марк Сталер
источник
1
cmd.exe - это оболочка CUI, а не графический интерфейс. Он не создает окон. Он использует окно консоли, которое создается и управляется экземпляром conhost.exe, хост-процессом консоли. Если программа CUI запускается нормально, код инициализации в базовой клиентской DLL (kernel32.dll или kernelbase.dll) наследует родительскую консоль, если таковая имеется, или выделяет новую консоль, если она не запущена с флагом создания DETACHED_PROCESS(т. Е. Без консоли) . Если он запускается с флагом создания CREATE_NEW_CONSOLE(как startиспользует CMD ), базовая DLL всегда выделяет новую консоль вместо наследования родительской.
Eryk Sun

Ответы:

201

Думаю, это работает:

start cmd.exe
е. Джеймс
источник
5
убедитесь, что вы проверили все различные варианты для start "start /?" / подождите и / я могу быть полезен.
Питер Гфадер,
47
fwiw, вам даже не нужно ставить cmd.exe после запуска. просто слово "старт" сделает это.
JustJeff
start / d <path> Для тех, кто хочет указать путь для нового окна cmd. Вот подробное описание.
anton.mo 04
56

Вот код, который вам нужен:

start cmd.exe @cmd /k "Command"
xsukax
источник
10
Что @cmdделаешь? Есть ли для этого документация?
michas
1
@подавляет прямой вывод, который обычно отображается в командной строке, но команда все равно будет выполняться.
Thielicious
Я использовал это, он работает, но если попытаться убить запущенную программу с помощью прерывания клавиатуры ctrl + c, запущенная программа не остановится. Он останавливается только при закрытии недавно открытого окна командной строки.
Сачин Г.
Не работает для многострочных команд, использующих ^. :( Как с этим справиться?
user2173353
32

Просто введите startв командной строке:

start

Это откроет новые cmdокна.

Эстерлинкоф
источник
22
start cmd.exe 

открывает отдельное окно

start file.cmd 

открывает командный файл и выполняет его в другой командной строке

BlackMael
источник
2

Вы можете просто ввести эти 3 команды из командной строки:

  1. start

  2. start cmd

  3. start cmd.exe

Джагадиш Х.Н.
источник
2
START "notepad.exe"
echo Will launch the notepad.exe application
PAUSE

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

@echo
TITLE example.bat
PAUSE
taskkill/IM cmd.exe

Превратите его в файл example.bat, сохраните его, затем откройте и запустите.

Майкл
источник
1

просто напишите в ваш файл bat

@cmd

или

@cmd /k "command1&command2"
Bajie
источник
4
Благодарим за &выполнение нескольких команд в новом приглашении. Мне нравится добавлять, exitпоэтому он закрывает приглашение, когда команда завершает работу.
Sylhare
0

Я также попытался запустить командный файл, который запускает процесс / сервер демона в конце задачи CCNET; Единственный способ сделать CruiseControl порождением независимого асинхронного процесса БЕЗ ожидания завершения процесса:

  1. создать командный файл для запуска процесса демона (серверного приложения)
  2. использовать планировщик задач для запуска командного файла как задачи CCNET (используя schtasks.exe)

    schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
    
    • 08:50 - формат времени ЧЧ: ММ

вам может потребоваться убить процесс при запуске ccnet

PS: выбранный ответ с помощью "start cmd.exe" не работает; действительно создается новая командная строка, но CCNET будет ждать завершения созданной команды.

воздушный змей
источник