Создайте новое окно 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"

10
Что @cmdделаешь? Есть ли для этого документация?
michas

1
@подавляет прямой вывод, который обычно отображается в командной строке, но команда все равно будет выполняться.
Thielicious

Я использовал это, он работает, но если попытаться убить запущенную программу с помощью прерывания клавиатуры ctrl + c, запущенная программа не остановится. Он останавливается только при закрытии недавно открытого окна командной строки.
Сачин Г.

Не работает для многострочных команд, использующих ^. :( Как с этим справиться?
user2173353


22
start cmd.exe 

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

start file.cmd 

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



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"

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 будет ждать завершения созданной команды.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.