1
ProcessStartInfo psi = new ProcessStartInfo(BatchFile)

Process p = Process.Start(psi)

p.IDWindowsTaskManagerに表示されるプロセスIDと異なるのはなぜですか

BatchFile適切なパラメータを持つ外部プログラムへのパスです)

4

3 に答える 3

2

BatchFileは、他のプロセスを1つずつ実行するある種のcmdまたはbatファイルだと思います。
したがって、Windowsタスクマネージャーでは、バッチファイルによって実行されるプロセスのIDが実際に表示されます。

私がこれをするなら

 var p = Process.Start("notepad.exe");

p.IdPIDタスクマネージャからと一致します。

ただし、これを行うと:

 var p = Process.Start("test.cmd"); // test.cmd has notepad.exe call inside

p.IdPIDタスクマネージャに表示されるものとは異なります。

于 2011-05-31T08:19:16.613 に答える
2

これは、バッチファイルによって開始されp.IDたプロセスのIDではなく、バッチファイルを実行しているプロセスのIDであるためだと思います。

正しいオーバーロードProcess.Startを使用して、実行可能ファイルを直接起動できます

于 2011-05-31T08:19:29.847 に答える
1

プロセスIDは、プロセスが動作している間のみ意味があります。最初に確認することは.HasExited、これがtrueの場合、プロセスIDを無視することです。もはや意味がありません。

画面上にまだ表示されているように見えても、何かを開始してプロセスを残さない方法はいくつかあります。

  • 何かを生成して終了するのがscript/bat / cmdの場合(「何か」ではなく、スクリプトを監視していることに注意してください)
  • exeが内部でexe間ブードゥーを実行する場合-たとえば、ほとんどのオフィスアプリとInternetExplorerはこれを実行します。既存のプロセスがある場合は、引数をそのプロセスに転送して処理し、すぐに終了します
于 2011-05-31T08:51:51.653 に答える