1. ホーム
  2. c#

[解決済み] コマンドプロンプトはどのようにして終了を待つタイミングを知るのですか?

2023-03-22 05:14:47

質問

私は C# で Windows コマンドプロンプトの再コード化を試みていました。私は、コマンド プロンプトが、起動されたプロセスが終了するのをいつ待ち、呼び出されたプロセスが終了するのをいつ待たないかをどのように知るのか不思議に思っていました。

たとえば、コマンド プロンプトで "notepad" と入力した場合。 メモ帳 が起動しますが、他のコマンドを実行することは可能です。しかし、more.com や ping.exe などのユーティリティを開くと、実行中のプログラムが終了するのを待ってから別のコマンドを実行できるようになります。

コマンドプロンプトはどのようにして終了を待つタイミングを知るのでしょうか、また、この動作をC#でどのようにエミュレートできるのでしょうか。

どのように解決するのですか?

アプリケーションが Win32 GUI アプリケーションの場合、そのまま実行され、コマンド プロンプトが終了するのを待つことはありません。

アプリケーションがコンソール アプリケーションの場合、コマンド プロンプトで実行され、コマンド プロンプトを復帰させるために終了を待つ必要があります。

EDITです。

OKです。技術的な説明が必要なようですね。 もし、あなたのアプリケーションで同じ機能をエミュレートしたい場合は IMAGE_OPTIONAL_HEADER EXE ファイルの ここで .

内部 IMAGE_OPTIONAL_HEADER は、あります。

 WORD                 Subsystem;

If SubSystem == 0x02 は、GUIアプリケーションであることを意味します。

If SubSystem == 0x03 は、コマンドプロンプトのアプリであることを意味します。

EDIT 2:

実際に見てみたい方は

  1. ダウンロード http://www.ntcore.com/exsuite.php

  2. calc.exeまたはnotepad.exeをデスクトップにコピーします。

  3. コピーしたcalc.exeをCFFエクスプローラで開く

  4. Nt Headers -> Optional Headersに移動します。

  5. サブシステムを 0x002 から 0x003 に変更します。

  6. 保存する

さて、新しく修正したcalcを実行すると、コマンドプロンプトが終了するのを待つのがわかるでしょう。