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

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

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


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


Ответы (9)


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

start cmd.exe
person e.James    schedule 19.11.2008
comment
убедитесь, что вы проверили все различные варианты start start /? / подождите и / я могу быть полезен. - person Peter Gfader; 21.12.2008
comment
fwiw, вам даже не нужно ставить cmd.exe после запуска. просто слово "старт" сделает это. - person JustJeff; 16.11.2010
comment
start / d ‹path› Для тех, кто хочет указать путь для нового окна cmd. Здесь подробное описание. - person anton.mo; 04.01.2018

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

start cmd.exe @cmd /k "Command"
person xsukax    schedule 04.11.2013
comment
Что делает @cmd? Есть ли для этого документация? - person michas; 19.07.2014
comment
@ подавляет прямой вывод, который обычно отображается в приглашении, но команда все равно будет выполняться. - person Thielicious; 28.09.2016
comment
Я использовал это, он работает, но если попытаться убить запущенную программу с помощью прерывания клавиатуры ctrl + c, запущенная программа не остановится. Он останавливается только тогда, когда вы закрываете только что открытое окно командной строки. - person Sachin G.; 12.04.2018
comment
Не работает для многострочных команд, использующих ^. :( Как с этим справиться? - person user2173353; 14.03.2019

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

start

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

person Esterlinkof    schedule 06.07.2015

start cmd.exe 

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

start file.cmd 

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

person BlackMael    schedule 19.11.2008

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

  1. start

  2. start cmd

  3. start cmd.exe

person Jagadeesh HN    schedule 25.10.2018

START "notepad.exe"
echo Will launch the notepad.exe application
PAUSE

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

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

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

person Michael    schedule 08.04.2013

просто напишите в ваш файл летучей мыши

@cmd

or

@cmd /k "command1&command2"
person bajie    schedule 14.11.2010
comment
Благодарим & за выполнение нескольких команд в новом приглашении. Мне нравится добавлять exit, чтобы он закрывал подсказку, когда команда завершила выполнение. - person Sylhare; 28.08.2017

Если мы просто используем команду start или start cmd.exe, откроется cmd.

Если вы хотите открыть то же окно командной строки;

start "Command Prompt"
person Irfan wani    schedule 19.05.2021

Я также попытался запустить командный файл, который запускает процесс / сервер демона в конце задачи 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 is the HH:MM time format

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

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

person kite    schedule 04.02.2013