c# - tag - ¿Cómo sabe el símbolo del sistema cuándo esperar para salir?
tag c# (3)
Cuando inicia un nuevo proceso, una aplicación GUI en este contexto que realmente funciona fuera de los límites del mensaje, el aviso no esperará. Pero, si ejecuta un comando que funciona completamente bajo los límites de la instancia actual de un aviso, espera.
Por lo tanto, el Bloc de notepad
comandos simplemente inicia la aplicación Bloc de notas y deja el control de la aplicación. Mientras, el comando ipconfig
ejecuta bajo un dominio (no es el dominio de la aplicación ) del aviso.
Para generalizar en extremo, cuando utilice Process.Start
en su equivalente de C #, no espere. De todos modos no lo hará.
Estaba tratando de hacer un código de comando de Windows volver a codificar en C #. Me preguntaba cómo el símbolo del sistema sabe cuándo esperar a que el proceso comience a salir, y cuándo no esperar que el proceso llamado salga.
Por ejemplo, si escribe en el símbolo del sistema "Bloc de notas", se iniciará el Notepad , pero aún puede ejecutar otros comandos. Sin embargo, si abre una utilidad como more.com, ping.exe u otra utilidad, esperará a que el programa en ejecución finalice antes de permitirse ejecutar otro comando.
¿Cómo sabe el símbolo del sistema cuándo esperar para salir, y cómo se puede emular este comportamiento en C #?
El valor predeterminado de un símbolo del sistema es generar el programa GUI en un proceso / fork separado. Sin embargo, puede ejecutar el Bloc de notas (u otro programa GUI) en línea con su símbolo del sistema / script de shell:
start /w notepad.exe
De esta forma, la secuencia de comandos / shell script solo continúa después de que el proceso notepad.exe haya finalizado.
Espero que esto ayude, TW
Si la aplicación es una aplicación Win32 GUI, solo se ejecutará y el símbolo del sistema no esperará a que salga.
Si la aplicación es una aplicación de consola, se ejecutará en el símbolo del sistema y deberá esperar a que termine para recuperar el símbolo del sistema.
EDITAR:
DE ACUERDO. Parece que necesitas una explicación técnica. Si desea emular la misma función en su aplicación, puede verificar IMAGE_OPTIONAL_HEADER
de archivos EXE here .
Dentro de IMAGE_OPTIONAL_HEADER
, hay:
WORD Subsystem;
If SubSystem == 0x02
significa que es una aplicación GUI.
If SubSystem == 0x03
significa que es una aplicación de símbolo del sistema.
EDICION 2:
Si quieres verlo en acción:
Descargue http://www.ntcore.com/exsuite.php
Copie calc.exe o notepad.exe a su escritorio
Abrir calc.exe copiado en CFF Explorer
Navega a encabezados Nt -> Encabezados opcionales
Cambiar SubSystem de 0x002 a 0x003
Guardarlo
Ahora ejecute el nuevo calc modificado y verá que el símbolo del sistema espera a que finalice.