我正在使用来自System.Diagnostics的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秒,然后终止该进程,但是它会给我一个错误,即它在执行调用之前已经关闭了。
在cygwin.Kill();调用行中,出现此异常:
System.InvalidOperationException类型的未处理异常发生在System.dll中 其他信息:无法处理请求,因为进程已退出。
为什么会发生这种事!
如果我用"C:\\cygwin64\\bin\\mintty.exe"替换"C:\\cygwin64\\bin\\bash.exe",那么异常就会消失!
有什么问题吗?
发布于 2017-04-05 11:59:58
在已经终止进程之后调用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();
}而且它应该能工作。
发布于 2017-04-05 22:08:12
这是启动windows程序的一种简单方法,它独立于启动过程和方法。程序立即分叉(启动一个新进程),新子进程打开mintty窗口,而原始进程退出。这是为了阻止你做你想做的事情。它在一个新的进程树中创建子进程。否则,如果从cmd窗口运行程序,则在关闭cmd窗口时程序将关闭。
https://stackoverflow.com/questions/43230280
复制相似问题