C#使用Process类调用外部程序分解
在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能。它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程。
一、启动进程实例
ProcessmyProcess=newProcess(); try { myProcess.StartInfo.UseShellExecute=false; myProcess.StartInfo.FileName="test.exe"; myProcess.StartInfo.CreateNoWindow=true; myProcess.Start(); } catch(Exceptione) { Console.WriteLine(e.Message); }
Process.Start方法,启动(或重用)此Process组件的StartInfo属性指定的进程资源,并将其与该组件关联。如果启动了进程资源,则为true;如果没有启动新的进程资源(例如,如果重用了现有进程),则为false。
Process.StartInfo属性,获取或设置要传递给Process的Start方法的属性。StartInfo表示用于启动进程的一组参数。调用Start时,StartInfo用于指定要启动的进程。唯一必须设置的StartInfo成员是FileName属性。
ProcessStartInfo.FileName属性,获取或设置要启动的应用程序或文档。FileName属性不需要表示可执行文件。它可以是其扩展名已经与系统上安装的应用程序关联的任何文件类型。
ProcessStartInfo.CreateNoWindow属性,获取或设置指示是否在新窗口中启动该进程的值。
二、关掉启动进程
Process.Kill方法,立即停止关联的进程。Kill强制终止进程,Kill方法将异步执行。在调用Kill方法后,请调用WaitForExit方法等待进程退出,或者检查HasExited属性以确定进程是否已经退出。
三、进程结束后调用其他方法
在调用某个进程结束后,我们通常需要执行其他的方法,比如,在做安装程序时,需要先判断.NetFramework环境是否安装,若未安装,则先调用.NETFramework安装程序后,继续运行安装程序方法。
通常这种情况下,有两种方法:
方法一:WaitForExit()方法。这种方法会阻塞当前进程,直到运行的外部程序退出。
System.Diagnostics.Processexep=System.Diagnostics.Process.Start(@"C:\Windows\Notepad.exe"); exep.WaitForExit();//关键,等待外部程序退出后才能往下执行 MessageBox.Show("Notepad.exe运行完毕");
上述代码在Notepad.exe记事本结束之后,弹出对话框。
方法二:Exited事件。为外部进程添加一个事件监视器,当退出后,获取通知,这种方法时不会阻塞当前进程,你可以处理其它事情。
System.Diagnostics.Processexep=newSystem.Diagnostics.Process(); exep.StartInfo.FileName=@"C:\Windows\Notepad.exe"; exep.EnableRaisingEvents=true; exep.Exited+=newEventHandler(exep_Exited); exep.Start(); voidexep_Exited(objectsender,EventArgse) { MessageBox.Show("Notepad.exe运行完毕"); }
在事件结束之后,调用Exited事件方法。
对于在C#程序开发中调用外部程序的操作,要判断这个被调用的EXE文件是否执行结束其实最跟本的是System.Diagnostics.Process类的应用,其中有一个方法,就是WaitForExit();和HasExited属性,这两个也都是为判断外部程序exe文件的执行状态而设计的,HasExited=ture时表示执行结束.