Saya mencoba untuk melakukan kode ulang prompt perintah Windows di C #. Saya bertanya-tanya bagaimana prompt perintah tahu kapan harus menunggu proses mulai keluar, dan kapan tidak menunggu proses yang dipanggil untuk keluar.
Misalnya, jika Anda mengetik di command prompt "notepad", Notepad akan diluncurkan, tetapi Anda masih dapat menjalankan perintah lain. Namun, jika Anda membuka utilitas seperti more.com, ping.exe, atau utilitas lain, program tersebut akan menunggu hingga program yang dijalankan selesai sebelum mengizinkan Anda menjalankan perintah lain.
Bagaimana prompt perintah mengetahui kapan harus menunggu keluar, dan bagaimana perilaku ini dapat ditiru di C #?
c#
windows
command-prompt
Justin Krejcha
sumber
sumber
Jawaban:
Jika aplikasinya adalah aplikasi GUI Win32, itu hanya akan berjalan dan command prompt tidak akan menunggu untuk keluar.
Jika aplikasinya adalah aplikasi konsol, itu akan berjalan di command prompt dan Anda harus menunggu hingga selesai untuk mendapatkan kembali prompt perintah.
EDIT:
BAIK. Sepertinya Anda membutuhkan penjelasan teknis. Jika Anda ingin meniru fitur yang sama dalam aplikasi Anda, Anda dapat memeriksa
IMAGE_OPTIONAL_HEADER
file EXE di sini .Di dalamnya
IMAGE_OPTIONAL_HEADER
, ada:If SubSystem == 0x02
artinya ini adalah aplikasi GUI.If SubSystem == 0x03
itu berarti itu adalah aplikasi prompt perintah.EDIT 2:
Jika Anda ingin melihatnya beraksi:
Unduh http://www.ntcore.com/exsuite.php
Salin calc.exe atau notepad.exe ke desktop Anda
Buka calc.exe yang disalin di CFF Explorer
Arahkan ke Nt Headers -> Opsional Headers
Ubah SubSistem dari 0x002 menjadi 0x003
Simpan itu
Sekarang jalankan calc yang baru dimodifikasi dan Anda akan melihat command prompt menunggu sampai itu dihentikan.
sumber
Default dari prompt perintah adalah untuk menelurkan program GUI dalam proses / garpu terpisah. Namun, Anda dapat menjalankan notepad (atau program GUI lainnya) sesuai dengan command prompt / skrip shell:
Dengan cara ini, skrip command prompt / shell hanya berlanjut setelah proses notepad.exe telah dihentikan.
Semoga ini bisa membantu, TW
sumber
Saat Anda memulai proses baru, aplikasi GUI dalam konteks ini yang benar-benar bekerja di luar batas prompt, prompt tidak akan menunggu. Tapi, jika Anda menjalankan perintah yang bekerja sepenuhnya di bawah batas contoh saat ini dari prompt, itu menunggu.
Jadi, perintah
notepad
baru saja memulai aplikasi Notepad dan meninggalkan kontrol aplikasi. Sementara, perintahipconfig
berjalan di bawah domain (tidak, ini bukan domain aplikasi ), dari prompt.Untuk sangat menggeneralisasi, saat Anda menggunakan
Process.Start
padanan C # Anda, jangan menunggu. Bagaimanapun juga tidak akan.sumber