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?


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

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"

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


22
start cmd.exe 

otwiera osobne okno

start file.cmd 

otwiera plik wsadowy i wykonuje go w innym wierszu polecenia


2

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

  1. start

  2. start cmd

  3. start cmd.exe


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.


1

prosty zapis w pliku bat

@cmd

lub

@cmd /k "command1&command2"

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.