Utwórz nowe okno cmd.exe z poziomu innego monitu cmd.exe

102

Jestem w trakcie konfigurowania CruiseControl.NET. Problem, który mam, polega na tym, że używam CC jako aplikacji konsolowej, a kiedy moja kompilacja zakończy się pomyślnie i zostanie wykonana (przy użyciu exec), uruchamia ją w wierszu poleceń CruiseControl DOS. Po prostu używam prostych plików wsadowych do uruchamiania mojej aplikacji, ale uruchamianie jej w ramach tego samego monitu co CC powoduje, że CC uważa, że ​​kompilacja trwa tak długo, jak działa moja aplikacja.

Czy istnieją parametry wiersza poleceń, cmd.exektóre spowodują pojawienie się innego oddzielnego okna zachęty?

Mark Stahler
źródło
1
cmd.exe to powłoka CUI, a nie GUI. Nie tworzy okien. Używa okna konsoli, które jest tworzone i zarządzane przez wystąpienie conhost.exe, proces hosta konsoli. Jeśli program CUI jest uruchamiany normalnie, kod inicjalizacji w podstawowej bibliotece DLL klienta (kernel32.dll lub kernelbase.dll) dziedziczy konsolę nadrzędną, jeśli istnieje, lub przydziela nową konsolę, chyba że została uruchomiona z flagą tworzenia DETACHED_PROCESS(tj. Bez konsoli) . Jeśli został uruchomiony z flagą tworzenia CREATE_NEW_CONSOLE(jak startużywa CMD ), podstawowa biblioteka DLL zawsze przydziela nową konsolę zamiast dziedziczyć nadrzędną.
Eryk Sun

Odpowiedzi:

201

Myślę, że to działa:

start cmd.exe
e.James
źródło
5
upewnij się, że sprawdziłeś wszystkie różne opcje startu „start /?” / czekaj i / mogę się przydać.
Peter Gfader,
47
fwiw, nie musisz nawet umieszczać pliku „cmd.exe” po uruchomieniu. wystarczy słowo „start”.
JustJeff,
start / d <ścieżka> Dla tych, którzy chcą ustawić ścieżkę do nowego okna cmd. Tutaj szczegółowy opis.
anton.mo
56

Oto kod, którego potrzebujesz:

start cmd.exe @cmd /k "Command"
xsukax
źródło
10
Co to @cmdrobi? Czy jest jakaś dokumentacja?
michas
1
@pomija bezpośrednie wyjście, które normalnie pojawiłoby się w zachęcie, ale polecenie nadal jest wykonywane.
Thielicious
Użyłem tego, działa, ale jeśli próbuję zabić uruchomiony program przez przerwanie klawiatury ctrl + c, uruchomiony program nie zatrzymuje się. Zatrzymuje się tylko po zamknięciu nowo otwartego okna wiersza polecenia.
Sachin G.,
Nie działa dla poleceń wielowierszowych używających ^. :( Czy jest jakiś sposób, aby sobie z tym poradzić?
user2173353
32

Po prostu wpisz startw wierszu polecenia:

start

Otworzy się nowe cmdokna.

Esterlinkof
źródło
22
start cmd.exe 

otwiera osobne okno

start file.cmd 

otwiera plik wsadowy i wykonuje go w innym wierszu polecenia

BlackMael
źródło
2

Możesz po prostu wpisać te 3 polecenia w wierszu polecenia:

  1. start

  2. start cmd

  3. start cmd.exe

Jagadeesh HN
źródło
2
START "notepad.exe"
echo Will launch the notepad.exe application
PAUSE

Aby utworzyć dowolny typ pliku cmd, wszystko, co musisz zrobić, to zapisać zawartość jako .bat, tj

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

Utwórz plik „example.bat”, zapisz go, a następnie otwórz i uruchom.

Michael
źródło
1

prosty zapis w pliku bat

@cmd

lub

@cmd /k "command1&command2"
bajie
źródło
4
Dziękujemy za &wykonanie wielu poleceń w nowym monicie. Lubię dodawać, exitwięc zamyka monit po zakończeniu działania polecenia.
Sylhare
0

Próbowałem również uruchomić plik wsadowy, który uruchamia proces / serwer demona na końcu zadania CCNET; Jedynym sposobem, aby CruiseControl odradzał się jako niezależny proces asynchroniczny BEZ czekania na zakończenie procesu, jest:

  1. utwórz plik wsadowy do uruchomienia procesu demona (aplikacja serwerowa)
  2. użyj harmonogramu zadań, aby uruchomić plik wsadowy jako zadanie CCNET (używając schtasks.exe)

    schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
    
    • 08:50 to format czasu HH: MM

może być konieczne zabicie procesu na początku ccnet

PS: wybrana odpowiedź za pomocą "start cmd.exe" nie działa; rzeczywiście pojawia się nowy wiersz polecenia, ale CCNET będzie czekać na zakończenie uruchomionego polecenia cmd.

latawiec
źródło