命令提示符如何知道何时等待退出?

Jus*_*cha 90 c# windows command-prompt

我试图在C#中执行Windows命令提示符重新编码.我想知道命令提示符如何知道何时等待进程开始退出,以及何时不等待被调用进程退出.

例如,如果在命令提示符下键入"notepad",记事本将启动,但您仍然可以执行其他命令.但是,如果您打开一个实用程序,如more.com,ping.exe或其他实用程序,它将等待执行程序完成后再让您执行另一个命令.

命令提示符如何知道何时等待退出,以及如何在C#中模拟此行为?

72D*_*BE9 121

如果应用程序是Win32 GUI应用程序,它将只运行,命令提示符不会等待它退出.

如果应用程序是控制台应用程序,它将在命令提示符下运行,您需要等待它完成以获取命令提示符.

编辑:

好.看来你需要技术解释.如果要在应用程序中模拟相同的功能,可以在此处检查IMAGE_OPTIONAL_HEADEREXE文件.

里面IMAGE_OPTIONAL_HEADER有:

 WORD                 Subsystem;
Run Code Online (Sandbox Code Playgroud)

If SubSystem == 0x02 这意味着它是一个GUI应用程序.

If SubSystem == 0x03 这意味着它是一个命令提示应用程序.

编辑2:

如果你想看到它的实际效果:

  1. 下载http://www.ntcore.com/exsuite.php

  2. 将calc.exe或notepad.exe复制到您的桌面

  3. 在CFF Explorer中打开复制的calc.exe

  4. 导航到Nt标题 - >可选标题

  5. 将SubSystem从0x002更改为0x003

  6. 保存

现在运行新修改的calc,您将看到命令提示符等待它终止.

  • 这真的提供了丰富的信息,再次感谢你重新制作我:) (3认同)
  • @SudhakarTillapudi,欢迎您,我更新了更多细节的答案,希望它能解释更多. (2认同)

Tw *_*ert 8

命令提示符的默认设置是在单独的进程/分支中生成GUI程序.但是,您可以使用命令提示符/ shell脚本内联运行记事本(或其他GUI程序):

start /w notepad.exe
Run Code Online (Sandbox Code Playgroud)

这样,命令提示符/ shell脚本仅在notepad.exe进程终止后才会继续.

希望这有帮助,TW