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



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

例如,如果您输入命令提示符"记事本",则记事本将启动,但是您仍然可以执行其他命令。但是,如果您打开一个诸如more.com,ping.exe或其他实用程序之类的实用程序,它将等待执行程序完成,然后才能执行另一个命令。

命令提示如何知道何时等待退出,以及如何在C#?

中模拟此行为

如果应用程序是win32 GUI应用程序,它将仅运行,命令提示将不会等待它退出。

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

编辑:

好的。看来您需要技术解释。如果要模拟应用程序中的相同功能,则可以在此处查看EXE文件的IMAGE_OPTIONAL_HEADER

IMAGE_OPTIONAL_HEADER中,有:

 WORD                 Subsystem;

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. 将子系统从0x002更改为0x003

  6. 保存

现在运行新的修改后的计算,您将看到命令提示符等待终止。

命令提示符的默认值是在单独的进程/fork中产生GUI程序。但是,您可以使用您的命令提示符/shell脚本来运行记事本(或其他GUI程序):

start /w notepad.exe

以这种方式,命令提示符/shell脚本仅在notepad.exe进程终止之后继续。

希望这会有所帮助,tw

启动新过程时,在此上下文中的GUI应用程序实际上在提示的边界之外工作,提示将不等待。但是,如果您运行一个完全在提示当前实例的边界下工作的命令,则等待。

因此,命令notepad刚刚启动记事本应用程序,并保留了应用程序的控制。同时,命令 ipconfig在域下运行(不,这不是应用程序域)。

极度概括,当您在c#等价中使用Process.Start时,请不要等待。无论如何它不会。

最新更新