我试图在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:
如果您想在行动中看到它:
下载http://www.ntcore.com/exsuite.php
复制calc.exe或Notepad.exe到您的桌面
cff Explorer中的开放复制calc.exe
导航到NT标题 ->可选标头
将子系统从0x002更改为0x003
保存
现在运行新的修改后的计算,您将看到命令提示符等待终止。
命令提示符的默认值是在单独的进程/fork中产生GUI程序。但是,您可以使用您的命令提示符/shell脚本来运行记事本(或其他GUI程序):
start /w notepad.exe
以这种方式,命令提示符/shell脚本仅在notepad.exe进程终止之后继续。
希望这会有所帮助,tw
启动新过程时,在此上下文中的GUI应用程序实际上在提示的边界之外工作,提示将不等待。但是,如果您运行一个完全在提示当前实例的边界下工作的命令,则等待。
因此,命令notepad
刚刚启动记事本应用程序,并保留了应用程序的控制。同时,命令 ipconfig
在域下运行(不,这不是应用程序域)。
极度概括,当您在c#等价中使用Process.Start
时,请不要等待。无论如何它不会。