Cree una nueva ventana de cmd.exe desde otro indicador de cmd.exe

102

Estoy en el proceso de configurar CruiseControl.NET. El problema que tengo es que estoy ejecutando CC como una aplicación de consola y cuando mi compilación se completa con éxito y se ejecuta (usando exec), la inicia dentro del indicador de DOS de CruiseControl. Solo estoy usando archivos por lotes simples para iniciar mi aplicación, pero hacer que se ejecute en el mismo mensaje que CC hace que CC piense que la compilación continúa mientras se ejecute mi aplicación.

¿Hay parámetros de línea de comando cmd.exeque generarán otra ventana de solicitud separada?

Mark Stahler
fuente
1
cmd.exe es un shell CUI, no una GUI. No crea ventanas. Utiliza una ventana de consola creada y administrada por una instancia de conhost.exe, el proceso de host de la consola. Si un programa CUI se inicia normalmente, el código de inicialización en la DLL del cliente base (kernel32.dll o kernelbase.dll) hereda la consola principal, si la hubiera, o asigna una nueva consola, a menos que se inicie con la marca de creación DETACHED_PROCESS(es decir, sin consola) . Si comienza con la marca de creación CREATE_NEW_CONSOLE(como startusa CMD ), la DLL base siempre asigna una nueva consola en lugar de heredar la de los padres.
Eryk Sun

Respuestas:

201

Creo que esto funciona:

start cmd.exe
e.James
fuente
5
asegúrese de revisar todas las diferentes opciones para iniciar "iniciar /?" / espera y / puedo ser útil.
Peter Gfader
46
fwiw, ni siquiera tiene que poner 'cmd.exe' después del inicio. solo la palabra 'empezar' lo hará.
JustJeff
start / d <ruta> Para aquellos que quieran establecer una ruta para una nueva ventana de cmd. Aquí descripción detallada.
anton.mo
56

Aquí está el código que necesita:

start cmd.exe @cmd /k "Command"
xsukax
fuente
10
Que esta @cmdhaciendo ¿Existe alguna documentación para ello?
michas
1
@suprime la salida directa que normalmente aparecería en el símbolo del sistema, pero el comando aún se ejecutará.
Thielicious
Usé esto, funciona, pero si trato de matar el programa en ejecución mediante la interrupción del teclado ctrl + c, el programa en ejecución no se detiene. Solo se detiene cuando cierra la ventana del símbolo del sistema recién abierta.
Sachin G.
No funciona para comandos de varias líneas que utilizan ^. :( ¿Alguna forma de lidiar con esto?
user2173353
32

Simplemente escriba starten el símbolo del sistema:

start

Esto abrirá nuevas cmdventanas.

Esterlinkof
fuente
22
start cmd.exe 

abre una ventana separada

start file.cmd 

abre el archivo por lotes y lo ejecuta en otro símbolo del sistema

BlackMael
fuente
2

Puede escribir estos 3 comandos desde el símbolo del sistema:

  1. start

  2. start cmd

  3. start cmd.exe

Jagadeesh HN
fuente
2
START "notepad.exe"
echo Will launch the notepad.exe application
PAUSE

Para crear cualquier tipo de archivo cmd, todo lo que tiene que hacer es guardar el contenido como .bat, es decir

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

Conviértalo en un archivo "example.bat", guárdelo, ábralo y ejecútelo.

Miguel
fuente
1

simplemente escriba en su archivo bat

@cmd

o

@cmd /k "command1&command2"
bajie
fuente
4
Gracias por &ejecutar varios comandos en el nuevo indicador. Me gusta agregar exitpara que cierre el indicador cuando el comando haya terminado de ejecutarse.
Sylhare
0

También intenté ejecutar un archivo por lotes que ejecuta el proceso / servidor daemon al final de la tarea CCNET; La única forma de hacer que CruiseControl genere un proceso asincrónico independiente SIN esperar el final del proceso es:

  1. crear un archivo por lotes para ejecutar el proceso daemon (aplicación de servidor)
  2. use el programador de tareas para ejecutar el archivo por lotes como tarea CCNET (usando schtasks.exe)

    schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
    
    • 08:50 es el formato de hora HH: MM

es posible que deba matar el proceso al comienzo de ccnet

PD: la respuesta seleccionada usando "start cmd.exe" no funciona; De hecho, se genera un nuevo símbolo del sistema, pero CCNET esperará a que finalice el cmd generado.

cometa
fuente