我正在使用System.Diagnostics
的Process
类,这是我的代码:
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"的未处理异常.dll
其他信息:无法处理请求,因为进程已退出。
为什么会这样?!
如果我用"C:\cygwin64\bin\bash.exe"
替换"C:\cygwin64\bin\mintty.exe"
,异常就会消失!
问题出在哪里?
您在已经杀死进程后调用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();
}
它应该有效。
这是启动独立于启动过程和方法的 Windows 程序的简单方法。程序立即分叉(启动一个新进程(,新子进程打开薄荷色窗口,而原始进程退出。这是为了防止你做你想做的事情。它在新的进程树中创建子进程。否则,如果从 cmd 窗口运行该程序,则当您关闭 cmd 窗口时,它将关闭。