86 votos

¿Cómo sabe el símbolo de mando cuándo hay que esperar para salir?

Intentaba hacer una recodificación del símbolo del sistema de Windows en C#. Me preguntaba cómo el símbolo del sistema sabe cuándo esperar a que el proceso se inicie para salir, y cuándo no esperar a que el proceso llamado salga.

Por ejemplo, si escribes en la línea de comandos "bloc de notas", Bloc de notas se lanzará, pero aún puede ejecutar otros comandos. Sin embargo, si abres una utilidad como more.com, ping.exe, u otra utilidad, esperará a que el programa de ejecución termine antes de permitirte ejecutar otro comando.

¿Cómo sabe el símbolo de mando cuándo esperar la salida, y cómo se puede emular este comportamiento en C#?

122voto

72DFBF5B A0DF5BE9 Puntos 2258

Si la aplicación es una aplicación Win32 GUI, sólo se ejecutará y el prompt de comando no esperará a que salga.

Si se trata de una aplicación de consola, se ejecutará en la línea de comandos y tendrás que esperar a que termine para recuperar la línea de comandos.

EDITAR:

OK. Parece que necesitas una explicación técnica. Si quiere emular la misma característica en su aplicación, puede comprobar IMAGE_OPTIONAL_HEADER de los archivos EXE aquí .

Dentro de IMAGE_OPTIONAL_HEADER lo hay:

 WORD                 Subsystem;

If SubSystem == 0x02 significa que es una aplicación GUI.

If SubSystem == 0x03 significa que es una aplicación de comandos.

EDITORIAL 2:

Si quieres verlo en acción:

  1. Descargue http://www.ntcore.com/exsuite.PHP

  2. Copia calc.exe o notepad.exe a tu escritorio

  3. Abrir calc.exe copiado en CFF Explorer

  4. Navegue a Encabezados Nt -> Encabezados opcionales

  5. Cambiar el sub-sistema de 0x002 a 0x003

  6. Guárdalo.

Ahora ejecute el nuevo calculo modificado y verá que la línea de comandos espera a que termine.

7voto

Tw Bert Puntos 1345

El valor por defecto de un símbolo de comando es generar el programa GUI en un proceso/forja separado. Sin embargo, puede ejecutar el bloc de notas (u otro programa GUI) en línea con su línea de comandos / Shell ShellscriptShell:

start /w notepad.exe

De esta forma, el símbolo del sistema / Shell ShellscriptShell sólo continúa después de que el proceso notepad.exe haya terminado.

Espero que esto ayude, TW

3voto

danish Puntos 2664

Cuando se inicia un nuevo proceso, una aplicación GUI en este contexto que realmente funciona fuera de los límites del prompt, el prompt no esperará. Pero, si se ejecuta un comando que funciona completamente bajo los límites de la instancia actual de un prompt, espera.

Así que, ordena notepad sólo inicia la aplicación del Bloc de Notas y deja el control de la aplicación. Mientras, el comando ipconfig corre bajo un dominio (no esto no es dominio de aplicaciones ), de la indicación.

Para generalizar en extremo, cuando se usa Process.Start en su equivalente en C#, no espere. De todas formas no lo hará.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X