我正在使用Process
中的System.Diagnostics
班级,这是我的代码:
public void doMain() {
Process cygwin = new Process();
cygwin.StartInfo.FileName = "C:\\cygwin64\\bin\\mintty.exe";
cygwin.Start();
cygwin.Refresh();
Thread.Sleep(1000);
cygwin.Kill();
cygwin.WaitForExit();
}
通常这应该运行mintty.exe
进程,然后等待1秒然后终止该进程,但它给出了我在kill调用之前已经关闭的错误。
在cygwin.Kill();
行上调用此异常:
未处理的类型' System.InvalidOperationException'发生在System.dll中 附加信息:无法处理请求,因为该流程已退出。
为什么会这样?!
如果我将"C:\\cygwin64\\bin\\mintty.exe"
替换为"C:\\cygwin64\\bin\\bash.exe"
,则异常就会消失!
有什么问题?
答案 0 :(得分:0)
你已经在杀死进程后调用cygwin.WaitForExit()
,因此错误。
将您的代码更新为:
public void doMain() {
Process cygwin = new Process();
cygwin.StartInfo.FileName = "C:\\cygwin64\\bin\\mintty.exe";
cygwin.Start();
cygwin.Refresh();
Thread.Sleep(1000);
cygwin.Kill();
//cygwin.WaitForExit();
}
它应该有用。
答案 1 :(得分:0)
这是启动独立于启动过程和方法的Windows程序的简单方法。程序立即分叉(启动一个新进程),新的子进程打开薄薄的窗口,原始进程退出。这是为了防止你做你想做的事情。它在新的进程树中创建子进程。否则,如果从cmd窗口运行程序,则在关闭cmd窗口时它将关闭。