Створіть нове вікно cmd.exe з іншого запиту cmd.exe


102

Я в процесі налаштування CruiseControl.NET. Проблема у мене полягає в тому, що я запускаю CC як консольний додаток, і коли моя збірка успішно завершується та виконується (за допомогою exec), вона запускає її в підказці CruiseControl DOS. Я просто використовую прості пакетні файли для запуску мого додатка, але запуск його в тому самому запиті, що і CC, змушує CC думати, що збірка триває до тих пір, поки працює моя програма.

Чи існують параметри командного рядка, які створюють cmd.exeінше окреме вікно підказки?


1
cmd.exe - це оболонка CUI, а не GUI. Він не створює вікон. Він використовує вікно консолі, створене та кероване екземпляром conhost.exe, процесом хосту консолі. Якщо програма CUI запускається нормально, код ініціалізації в базовій клієнтській DLL (kernel32.dll або kernelbase.dll) успадковує батьківську консоль, якщо така є, або виділяє нову консоль, якщо вона не запущена з прапором створення DETACHED_PROCESS(тобто без консолі) . Якщо це починається з прапора створення CREATE_NEW_CONSOLE(як startвикористовує CMD ), базова DLL завжди виділяє нову консоль, а не успадковує батьківську.
Eryk Sun

Відповіді:


201

Я думаю, це працює:

start cmd.exe

5
обов’язково ознайомтесь з усіма різними варіантами для запуску "старт /?" / почекай і / я можу бути корисним.
Пітер Гфадер,

46
fwiw, вам навіть не потрібно ставити 'cmd.exe' після запуску. просто слово "старт" це зробить.
JustJeff

start / d <path> Для тих, хто хоче встановити шлях для нового вікна cmd. Тут докладний опис.
anton.mo

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 - формат часу HH: MM

можливо, вам доведеться вбити процес на початку ccnet

PS: вибрана відповідь за допомогою "start cmd.exe" не працює; новий командний рядок справді створений, але CCNET буде чекати закінчення створеного cmd.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.